Pdfをc#で作りたい

とあるシステムで帳票をテンプレートから生成する機能を作ろうと思ったので、
いろいろ調べていると、ThinReportsという便利そうなアプリがあることを知りました。

rubyがあれば使えるらしいのですが、せっかくなのでpdfを勉強してc#で
ThinReportsのテンプレートファイルから生成できるような仕組みを作りたいと考えました。
それがこれ(https://github.com/223n/PDFCnet)なのですが、
まだまだ足りない機能などがあり、かなり修正が必要だなぁと感じています。
また、AdobeReaderなどで開くと保存ダイアログが表示されてしまい、
正常に生成できていないと思われます。
いつかは完成させたいと思いながら、少しずつ頑張っていきたいと思います。

リリースで思うこと

ある開発者曰く

「テストを実施したソースコードが一緒であっても、新たにコンパイルしたファイルはダメだ」
とおっしゃいます。
まず、VisualStudioでは、Webであれば発行先ごとにプロファイルを作成して、
自動的に発行を行ってくれる機能がありますが、これは使えないことになります。
また、ClickOnceでは、テストと本番で設定を変えることがあり、
どうしてもコンパイルしなければならないため、使えません。
自動的にテストやコンパイルを行い、配置までしてくれるCIツールも
この意見では使えないものになってしまいます。
しかし、最初の原則を守ったままCIツールはどうしても使いたい。
コンパイルしたものをGitなどに上げて、
それを配置だけしてしまう、ということも考えられますが、
それではテスト機能というものが丸っ切り意味が無いようにも感じてしまいます。
しかも、この原則、少し困ったことになります。
Debugでコンパイルしたものはどうするのか?という問題です。
「本番前なんだからReleaseでコンパイルしたものを配置するに決まっている!」
などと言われそうですが、DebugとReleaseでテストと本番の挙動を制御している場合、難しいです。
「それを回避できるようにするのが開発者の役目!」とか言い出したら、
もう何のためのDebugとReleaseなんだよと言いたいですが…
どうしたものかなぁ。
(*結局のところ、ソースコードが一緒なら大丈夫!と誰かが大判をついてくれることを待っているようにしか見えないのですが…)
(*CIツール以前に、ClickOnceを使っている時点で、原則を破っていることになりますが)

テストコードの実装

テストコードはちょっとした修正結果の担保を簡単に取ることができる非常に心強い味方です。

しかし、テストコードをいざC#で書いていると、少し困ったことに遭遇してしまいました。

まず、現在のVisualStudioでは、テスト用のプロジェクトを作成して、対象のプロジェクトを参照します。

そのため、通常はテスト対象のメソッドなりプロパティは、外部から触れるpublicなどに限られてしまい、

privateは外部からアクセスしてのテストはできません。

(* 日本という国は恐ろしいもので、動的参照を用いて参照しているexeやdll内のprivateなメソッドやプロパティ、

フィールドを参照して書き換え、テストするぜヒャッハーな悪用できちゃうような技術を作ってしまう人も居るわけで…)

では、外部からアクセス可能な範囲でテストをしようとするのですが、

通常、publicを避けているのでテストしたいメソッドがprivateだったりして拡張メソッドや困ってしまいます。

(* 先の動的参照によるテストもありますが、動的参照はインテリセンスを殺してしまい、

非常に保守性が低下しがちで、誰も引き継げなくなってしまうという以前に、ナイワーを感じる今日この頃。)

自分自身、このテストの実装という経験や知識が弱いと感じているのですが、

いい資料はないものでしょうか…