Исключение Weird.net 4.0 при выполнении модульных тестов
Я получаю следующее исключение при попытке запуска моих модульных тестов с использованием .net 4.0 под VS2010 с moq 3.1.
Попытка прозрачным методом безопасности 'SPPD.Backend.DataAccess.Test.Specs_for_Core.When_using_base.Can_create_mapper()' для доступа к критическому критическому методу безопасности 'Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsNotNull(System.Object)' не удалось.
Монтаж "SPPD.Backend.DataAccess.Test, Версия = 1.0.0.0, Культура = нейтральная, PublicKeyToken = null 'отмечен AllowPartiallyTrustedCallersAttribute, и использует защиту уровня 2 прозрачность. Уровень 2 прозрачность вызывает все методы в AllowPartiallyTrustedCallers сборки для обеспечения безопасности прозрачно по умолчанию, что может быть причина этого исключения.
Тест, который я запускаю, действительно прямолинейный и выглядит примерно так:
[TestMethod]
public void Can_create_mapper()
{
this.SetupTest();
var mockMapper = new Moq.Mock<IMapper>().Object;
this._Resolver.Setup(x => x.Resolve<IMapper>()).Returns(mockMapper).Verifiable();
var testBaseDa = new TestBaseDa();
var result = testBaseDa.TestCreateMapper<IMapper>();
Assert.IsNotNull(result); //<<< THROWS EXCEPTION HERE
Assert.AreSame(mockMapper, result);
this._Resolver.Verify();
}
Я понятия не имею, что это значит, и я оглядывался и очень мало разбирался в этой теме. Ближайшая ссылка, которую я нашел, это http://dotnetzip.codeplex.com/Thread/View.aspx?ThreadId=80274, но ее не очень понятно, что они сделали, чтобы исправить ее...
У кого-нибудь есть идеи?
Ответы
Ответ 1
MSDN: ".NET Framework версии 4 вводит новые правила безопасности, которые влияют на поведение атрибута AllowPartiallyTrustedCallersAttribute (см. Security-Transparent Code, Level 2). В .NET Framework 4 весь код по умолчанию имеет прозрачность безопасности, то есть частично доверять. Однако вы можете аннотировать отдельные типы и члены, чтобы назначить им другие атрибуты прозрачности.
Не сталкивайтесь с этим сами, но, возможно, вы импортировали somehing из проекта 3.5.
Ознакомьтесь с этими ссылками:
Изменения безопасности в .NET Framework 4
Security-Transparent Code, уровень 2
AllowPartiallyTrustedCallersAttribute Class
Ответ 2
В AssemblyInfo.cs ссылочного проекта добавьте следующую строку
[assembly: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)]
Ответ 3
Это было исправлено в последней версии Moq (фактически это было исправление в DynamicProxy).
Попробуйте последнюю версию бета-версии v4.
http://moq.me