所有单元测试都抛出 BadImageFormatException 与最小起订量?
All unit tests throwing BadImageFormatException with Moq?
我目前正在增加我们软件产品的代码覆盖率,运行 遇到了问题;我的所有单元测试(使用 'Any CPU' 编译时)都因抛出 'BadImageFormatException' 而失败。
可以通过使用 'x86' 而不是 'Any CPU' 构建解决方案来规避此异常,但是要求是我们需要能够 运行 使用 Any [=] 29=] 位。
涉及 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 构建时,我可以确认此测试成功。有没有人知道如何让 Moq 在使用 'Any CPU' 构建时表现良好?
顺便说一句,我还可以确认我在解决方案中的所有项目都是使用相同的值 ('Any CPU') 构建的。我正在使用 Moq v4.0。
编辑:这是完整的异常:测试方法 [ProductName 和调用的方法] 抛出异常:
System.BadImageFormatException:无法加载文件或程序集“[产品名称],版本=1.0.0.0,文化=中性,PublicKeyToken=null”或其依赖项之一。试图加载格式不正确的程序。
这可能是由于缺少项目或其他程序集引用造成的。尝试确保您拥有解决方案中所有项目的项目引用。
This post还有一个例子。
好的,经过一番挖掘,我终于找到了问题所在。即使您从工具栏 select 'Build' 然后 'Configuration Manager' 看到 Platform 设置为 'Any CPU' (就像我的情况一样),我没有做的是检查项目中的目标平台。
要检查目标平台,您需要执行以下操作:
- 右键单击您的项目,然后 select 'Properties'
- Select 左侧的 'Build' 选项卡
- 确保您的测试项目的目标平台与您正在测试的项目相匹配
在我的例子中,我的测试目标是 'Any CPU',但我的实时项目目标是 'x64'。这就是导致问题的原因。
我目前正在增加我们软件产品的代码覆盖率,运行 遇到了问题;我的所有单元测试(使用 'Any CPU' 编译时)都因抛出 'BadImageFormatException' 而失败。
可以通过使用 'x86' 而不是 'Any CPU' 构建解决方案来规避此异常,但是要求是我们需要能够 运行 使用 Any [=] 29=] 位。
涉及 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 构建时,我可以确认此测试成功。有没有人知道如何让 Moq 在使用 'Any CPU' 构建时表现良好?
顺便说一句,我还可以确认我在解决方案中的所有项目都是使用相同的值 ('Any CPU') 构建的。我正在使用 Moq v4.0。
编辑:这是完整的异常:测试方法 [ProductName 和调用的方法] 抛出异常: System.BadImageFormatException:无法加载文件或程序集“[产品名称],版本=1.0.0.0,文化=中性,PublicKeyToken=null”或其依赖项之一。试图加载格式不正确的程序。
这可能是由于缺少项目或其他程序集引用造成的。尝试确保您拥有解决方案中所有项目的项目引用。
This post还有一个例子。
好的,经过一番挖掘,我终于找到了问题所在。即使您从工具栏 select 'Build' 然后 'Configuration Manager' 看到 Platform 设置为 'Any CPU' (就像我的情况一样),我没有做的是检查项目中的目标平台。
要检查目标平台,您需要执行以下操作:
- 右键单击您的项目,然后 select 'Properties'
- Select 左侧的 'Build' 选项卡
- 确保您的测试项目的目标平台与您正在测试的项目相匹配
在我的例子中,我的测试目标是 'Any CPU',但我的实时项目目标是 'x64'。这就是导致问题的原因。