所有单元测试都使用Moq抛出BadImageFormatException?

时间:2016-01-28 13:53:06

标签: unit-testing exception build moq badimageformatexception

我目前正在增加对我们软件产品的代码覆盖率,并遇到了一个问题;我所有的单元测试(使用'任何CPU'编译时)由于抛出了BadImageFormatException而失败了#39;

使用' x86'来构建解决方案可以避免此异常。而不是'任何CPU'但是要求是我们需要能够使用任何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构建此测试是否成功。有没有人对如何使用&#39;任何CPU&#39;?

建立Moq玩得很好有任何想法?

另外,我还可以确认解决方案中的所有项目都是使用相同的值构建的(&#39;任何CPU&#39;)。我正在使用Moq v4.0。

编辑:这是完整的例外:测试方法[ProductName和调用的方法]抛出异常: System.BadImageFormatException:无法加载文件或程序集&#39; [产品名称],版本= 1.0.0.0,Culture = neutral,PublicKeyToken = null&#39;或其中一个依赖项。尝试加载格式不正确的程序。

2 个答案:

答案 0 :(得分:5)

好的,经过一番挖掘,我终于找到了问题所在。即使您从工具栏中选择“构建”,然后选择“配置管理器”,并看到平台设置为“任何CPU”(就像我的情况一样),我还没做的就是检查目标平台在项目中。

要检查目标平台,您需要执行以下操作:

  • 右键单击您的项目,然后选择“属性”
  • 选择左侧的“构建”标签
  • 确保测试项目的目标平台与您正在测试的项目的目标平台相匹配

在我的情况下,我的测试针对的是“任何CPU”,但我的实时项目是针对'x64'。这就是造成这个问题的原因。

答案 1 :(得分:1)

这可能是由缺少项目或其他程序集引用引起的。尝试确保您的解决方案中的所有项目都有项目参考。

This post还有一个例子。