I am using Visual Studio 2015 Enterprise RTM to write unit tests for a project that uses Unity Container.
I have discovered that the simple act of adding a fakes assembly for Unity, not even actually using the fake, is sufficient to generate this exception:
System.InvalidProgramException: Common Language Runtime detected an invalid program.
Consider the following steps to reproduce:
-
Using Visual Studio 2015 Enterprise RTM create a Unit Test project targeting .NET 4.6
-
Add the NuGet package "Unity" version 3.5.1404.0
-
Add the NuGet package "CommonServiceLocator" version 1.2.0
-
Write a single unit test like so:
[TestClass]
public class UnitTest1 : IDisposable
{
[TestMethod]
public void TestMethod1()
{
new ResolvedArrayParameter<IDisposable>(new IDisposable[] { });
}
void IDisposable.Dispose()
{
}
}
-
Verify the test passes
-
Right click on the Microsoft.Practices.Unity reference and choose "Add Fakes Assembly"
-
Re-run the test
-
Observe the following remarkable test failure:
Test Name: TestMethod1
Test FullName: UnitTestProject11.UnitTest1.TestMethod1
Test Source: c:\temp\UnitTestProject11\UnitTestProject11\UnitTest1.cs : line 12
Test Outcome: Failed
Test Duration: 0:00:00.0572447Result StackTrace:
at Microsoft.Practices.Unity.ResolvedArrayParameter..ctor(Type arrayParameterType, Type elementType, Object[] elementValues)
at Microsoft.Practices.Unity.ResolvedArrayParameter`1..ctor(Object[] elementValues)
at UnitTestProject11.UnitTest1.TestMethod1() in c:\temp\UnitTestProject11\UnitTestProject11\UnitTest1.cs:line 13
Result Message:
Test method UnitTestProject11.UnitTest1.TestMethod1 threw exception:
System.InvalidProgramException: Common Language Runtime detected an invalid program.
The most extraordinary feature of this problem is evidently fakes don't even need to appear directly in the code for the failure to manifest.
An extensive amount of fiddling reveals that retargeting the test project to .NET 4.5 "fixes" the problem, which is a non-starter for me because of another issue I posted some weeks back.
Even more fiddling with virtually all fakes settings (code contracts, etc.) yielded no solution.
Any advice on this issue would be very much appreciated.
Aucun commentaire:
Enregistrer un commentaire