unit-testing - 所有单元测试都将Moq抛出BadImageFormatException吗?

标签 unit-testing exception build moq badimageformatexception

我目前正在增加我们软件产品的代码覆盖率,但是遇到了问题。我的所有单元测试(使用“任何CPU”进行编译时)均由于抛出“BadImageFormatException”而失败。

通过使用'x86'而不是'Any CPU'构建解决方案可以避免此异常,但是要求如此,因此我们需要能够使用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构建该测试是否成功。有没有人对使用“任何CPU”构建Moq时如何使Moq表现出色有任何想法?

顺便说一句,我还可以确认解决方案中的所有项目都是使用相同的值(“任何CPU”)构建的。我正在使用Moq v4.0。

编辑:这是完整的异常:测试方法[ProductName和调用的方法]引发了异常:
System.BadImageFormatException:无法加载文件或程序集“[产品名称],版本= 1.0.0.0,区域性=中性,PublicKeyToken =空”或其依赖项之一。试图加载格式不正确的程序。

最佳答案

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

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

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

  • 就我而言,我的测试针对“Any CPU”,但我的实时项目针对“x64”。这就是导致此问题的原因。

    关于unit-testing - 所有单元测试都将Moq抛出BadImageFormatException吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35063399/

    相关文章:

    android - IllegalArgumentException : Invalid int: "OS" with Samsung tts

    java - 如何构建混合 Java/Scala 项目?

    c++ - 使用 Cmake 来做 ./genMakefiles && make -j4

    python - 基于抽象基类捕获异常

    scala - 在 Play 中使用 ScalaTest 对 Controller 进行单元测试!框架

    Django REST 测试忽略工厂的 url

    android - 如何使用 MockK 测试挂起功能?

    java - 对空结果集的非法操作

    android - 如何构建符合 Google Play 64 位要求的 NativeScript Vue 应用程序?

    reactjs - 用 Jest 测试中继 [createFragmentContainer]?