例えば次のコードがあったとします。
[Fact] public void WhenClosed() { var window = new Window(); }
これを実行すると次のようなエラーがでます。
UIはテストしないんじゃないの?と言われそうな気もしますが、Windowに貼り付ける汎用Behaviorをライブラリ化して使いまわしたいとかいう時に、Windowインスタンスが作れないがためにUnitTest書けないじゃんてな事が、稀に良くあります。
WPFなどはUI層はSingle Thread Apartment(STA)なスレッド上で実行される必要があります(この表現はもしかしたら正しくないかもしれません)。
よくUIはUIスレッドで実行しろと言われるあれです。
xUnitはマルチスレッドでテスト実行されますし、STAではもちろんありません。どうしましょう?こまったな。
と思っていたら、神がいました。
このパッケージをインストールして次のようにコードを修正します。
[WpfFact] public void WhenClosed() { var window = new Window(); }
FactAttributeからWpfFactAttributeに変更するだけでちゃんとSTAで動作させてくれます。凄い!どうなってるの!?
という訳で、今日はこれだけ。
いやあ、自力で何とかしようとしかけて、しないで済んで助かったなあ。