У меня есть тестовый класс, который выглядит следующим образом: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);
как единственное в методе тестирования, он работает нормально и проходит.
Что мне следует предпринять, чтобы исправить эту проблему?
Примечание: ваша сборка не подписана, поэтому версия не имеет большого значения. Проверьте полное исключение - у вас могут отсутствовать зависимости (или что-то вроде этого). –
Проверьте, какой профиль сборки вы используете в свойствах проекта. Is нацеливает правильную версию .net или профиль клиента? Проверьте выходной каталог проекта. Как вы добавляете ссылку в этот класс? – Amit