現在、ソフトウェア製品のコード カバレッジを拡大している最中に問題が発生しました。「BadImageFormatException」をスローするため、すべての単体テスト (「任意の CPU」を使用してコンパイルした場合) が失敗します。
この例外は、「Any CPU」の代わりに「x86」を使用してソリューションを構築することで回避できますが、Any CPU/x64 ビットを使用して実行できる必要があるという要件があります。
Moq を含むすべての単体テストは、ほぼ同じ形式に従います。
[TestMethod]
public void GetProduct_ValidId_ProductReturned()
{
//Setting up the object
Product prod = new Product();
prod.ID = 7;
prod.Name = "Test";
//Create the mocks
var mockProductRepo = new Mock<IRepository<Product>>();
var testDb = new Mock<IUnitOfWork>();
//Setup what the repo needs to return, in this case it's a Product
mockProductRepo.Setup(m => m.getByID(7)).Returns(prod);
//Setup what the database needs to return, in this case it's our repo which we've already setup
testDb.SetupGet(m => m.ProductRepo).Returns(mockProductRepo.Object);
//Run the test
Product returnedProd = ProductHelper.getProduct(testDb.Object, 7);
Assert.IsNotNull(returnedProd);
}
x86でビルドした場合、このテストが成功することを確認できます。「Any CPU」を使用して構築したときに Moq をうまくプレイさせる方法について、誰かアイデアはありますか?
余談ですが、ソリューション内のすべてのプロジェクトが同じ値 (「任意の CPU」) を使用してビルドされていることも確認できます。Moq v4.0 を使用しています。
編集: 完全な例外は次のとおりです: テスト メソッド [ProductName と呼び出されたメソッド] が例外をスローしました: System.BadImageFormatException: ファイルまたはアセンブリを読み込めませんでした '[製品名]、バージョン = 1.0.0.0、カルチャ = ニュートラル、PublicKeyToken = null'またはその依存関係の 1 つ。不正な形式のプログラムをロードしようとしました。