前提
- Visual Studio 2019 のIDE上
- Chaining Assertion の話もあり、というか xUnit.net でユニットテストを始める が動くまで
xUnitプロジェクトの作成で躓く
VS2019の「xUnit テストプロジェクト(.NET Core)」で、プロジェクトを追加したら「コンパイルエラー(CS0246)」のエラーが3つ出ました。
トラブル解決のため焦っており、正確な所は失念しましたが、少なくとも
型または名前空間の名前 'Fact' が見つかりませんでした (using ディレクティブまたはアセンブリ参照が指定されていることを確認してください)
という、xUnitを使う上では致命的なエラーが出ていました。
「ソリューションのNuGetパッケージの管理」から見ると、以下のパッケージが最新版ではありませんでした。
- coverlet.collector
- Microsoft.NET.Test.Sdk
- xunit
- xunit.runner.visualstudio
ここでパッケージ最新版への更新を試みると C:\Program Files\dotnet\sdk\NuGetFallbackFolder の中にある System.AppContext.4.1.0 がエラー、などの不穏が発生。
該当のエラーが出ているフォルダは削除してよさそうな情報が見つかったので、エラーが出るフォルダを1つ1つ削除していったら、今度はフォルダ特定できないようなエラー発生。
結論を言うと、キレ気味に NuGetFallbackFolder そのものを削除したら、すんなり更新できました。
Chaining Assertionの導入で躓く
冒頭に出した記事では「githubから直接コードをコピってテストプロジェクトにぶち込むのが良い」と書いてありましたが、正直美しくないと感じました。あくまで個人の主観ですが。
少なくともgithubのモノとバージョンは同一っぽいので、NuGetから入れても、何も起こらない。
(1+1).Is(2)
とやっても Is が定義されてない云々、と。
これは、正直参りましたが ChainingAssertion-xUnit ではなく ChainingAssertion-xUnit.Bin を入れるのが正解のようです。
最後に
これ、いわゆるおま環「おまえの環境の問題」かなーとも思ったんですよね…ただ、もし同じことに引っかかってる人がいたらと思い、ざっくりと記事に起こしました。
2020/01/27追記
どなたか宜しければ、Visual Studio CodeでのxUnitの使い方について教えてください、リンクで構いませんので!
おまけ
ちゃんと C# のコードを書ける人には一目瞭然でしょうけど、xUnit.net でユニットテストを始めるのコードは、テストプロジェクトを簡単に動かすため、テスト対象コードをテストプロジェクト内に書いているようです。
実際にテストコードを書くときは、ちゃんとテストプロジェクトとプロダクトプロジェクトを分離しましょうね…大きなお世話だったかな?