2015-02-19 3 views
0

У меня есть тестовый класс, который выглядит следующим образом:Test пытается загрузить тип из своей собственной сборки

// disclaimer: some type names have been changed to protect IP, 
// there may be inconsistencies 

using Moq; 
using MyComp.MyProj.DataAccessLayer; 

namespace Test.Common.Data.DataAccessLayer 
{ 
    public class Test 
    { 
     Mock<IApplicationData> appData; 
     Mock<IConfig> config; 

     public Test() 
     { 
      this.appData = new Mock<IApplicationData>(); 
      this.config = new Mock<IConfig>(); 
     } 


     [Fact] 
     public void GetNewInstance_WithoutUser() 
     { 
      this.config.Setup(c => c.GetConfigInt(It.IsAny<string>())).Returns(1); 
      // DalFactory is a type in MyComp.MyProj.DataAccessLayer 
      var dal = DalFactory.GetDataAccessLayer(1, "fakestring", (IApplicationData)this.appData.Object, (IConfig)this.config.Object); 
      Assert.IsType <IDataAccessLayer>(dal); 
     } 
    } 
} 

`` `

Проблема здесь заключается в том, что всякий раз, когда он пытается получить доступ к DalFactory типа, он бросает это исключение:

System.TypeLoadException : Could not load type 'MyComp.MyProj.DataAccessLayer.DalFactory' from assembly 'DataAccessLayer, Version=0.9.0.0, Culture=neutral, PublicKeyToken=null'. 

Версия является ключом там, так как MyComp.MyProj.DataAccessLayer в сборе с версией 8.0.x, а тест на сборочном остроумии h Версия 0.9.0 (или 1.0.0 или 0.0.1, я пробовал несколько значений).

Вопрос в том, почему Moq пытается загрузить неправильную сборку для этого типа?

Я попытался: посмотрел в GAC, чтобы увидеть, есть ли там сборка, повторно добавив ссылки на проект, изменив AssemblyTitle в тесте AssemblyInfo.cs, изменив имя класса, в котором находится тест. и используя псевдоним в операторе using. Нет эффекта.

Метод GetDataAccessLayer - это public static, поэтому я не думаю, что здесь InternalsVisibleTo факторов. Если I F12 перейдет к тестируемому типу, все будет хорошо, он попадет в нужное место.

Если я положил Assert.True(1 == 1); как единственное в методе тестирования, он работает нормально и проходит.

Что мне следует предпринять, чтобы исправить эту проблему?

+0

Примечание: ваша сборка не подписана, поэтому версия не имеет большого значения. Проверьте полное исключение - у вас могут отсутствовать зависимости (или что-то вроде этого). –

+0

Проверьте, какой профиль сборки вы используете в свойствах проекта. Is нацеливает правильную версию .net или профиль клиента? Проверьте выходной каталог проекта. Как вы добавляете ссылку в этот класс? – Amit

ответ

0

Try:

  1. заново строить свой код в MyComp.MyProj.DataAccessLayer проекта
  2. повторно построить Test проект
  3. тесты снова запустить

посмотреть, если что помогает

Также убедитесь, что целевая платформа клиента одинакова для обоих проектов (Свойства> Приложение> Целевая структура)

+0

Ни один из них не помог. Спасибо хоть. – jcollum

Смежные вопросы