Все модульные тесты вызывают исключение BadImageFormatException с Moq?

В настоящее время я занимаюсь увеличением охвата кода наших программных продуктов и столкнулся с проблемой; все мои модульные тесты (при компиляции с использованием «любого процессора») терпят неудачу из-за создания «BadImageFormatException».

Это исключение можно обойти, создав решение с использованием «x86» вместо «Любой процессор», однако требования таковы, что нам нужно иметь возможность запускать их с использованием любого бита 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. Есть ли у кого-нибудь идеи о том, как я могу заставить Moq хорошо играть при сборке с использованием «любого процессора»?

Кроме того, я также могу подтвердить, что все мои проекты в решении построены с использованием одного и того же значения («Любой процессор»). Я использую Moq v4.0.

РЕДАКТИРОВАТЬ: Вот полное исключение: тестовый метод [ProductName и вызванный метод] вызвал исключение: System.BadImageFormatException: не удалось загрузить файл или сборку «[имя продукта], версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = null ' или одна из его зависимостей. Была предпринята попытка загрузить программу с неверным форматом.


person Novastorm    schedule 28.01.2016    source источник
comment
Вы уверены, что это Moq вызывает исключение? Можете ли вы опубликовать полный текст/стек вызовов исключения?   -  person Patrick Quirk    schedule 28.01.2016
comment
Это вероятный виновник; все остальные тесты, на которых не запущен Moq, работают без проблем   -  person Novastorm    schedule 28.01.2016


Ответы (2)


Итак, после некоторого копания я наконец узнал, в чем проблема. Даже если вы выберете «Сборка», а затем «Диспетчер конфигурации» на панели инструментов и увидите, что для платформы установлено значение «Любой процессор» (как было в моем случае), я не проверил Целевая платформа в проекте.

Чтобы проверить целевую платформу, вам необходимо сделать следующее:

  • Щелкните правой кнопкой мыши свой проект и выберите «Свойства».
  • Выберите вкладку «Сборка» слева.
  • Убедитесь, что целевая платформа вашего тестового проекта соответствует целевой платформе проекта, который вы тестируете.

В моем случае мой тест был нацелен на «Любой процессор», но мой живой проект был нацелен на «x64». Это и было причиной проблемы.

person Novastorm    schedule 28.01.2016
comment
Вы должны принять это как ответ, не имеет значения, что вы решили это самостоятельно. - person LWood; 28.01.2016
comment
Я сделаю этот ответ принятым, как только истечет необходимое количество времени :) (там написано, что я не могу принять свой собственный ответ еще 2 дня - может быть, потому, что у меня низкая репутация (?)) - person Novastorm; 28.01.2016

Это может быть вызвано отсутствием проекта или других ссылок на сборки. Убедитесь, что у вас есть ссылки на все проекты в вашем решении.

В этом сообщении есть еще один пример.

person chief7    schedule 28.01.2016
comment
Я посмотрю на это и посмотрю, так ли это. Я обновил свой вопрос с точным исключением, которое выбрасывается - person Novastorm; 28.01.2016