在MSTest项目中,我为一些测试声明了一个内部类。它在测试项目的命名空间中声明如下:
namespace Körningar.Test.Hjälpklasser
{
internal interface ITestkörningParams { int Heltal { get; } string Text { get; } }
internal class TestkörningParams : ITestkörningParams { public int Heltal { get; set; } public string Text { get; set; } }
}
在一个测试方法中,我有一个这个类的实例
parms
,并遍历其属性以记录其值:
object parms = paramhämtare.HämtaParametrar(args, körningsparametrarKlass);
log.Info($"Körningsparametrar:\r\n"
+ string.Join("\r\n",
körningsparametrarKlass.GetProperties()
.Where(pi => pi.GetGetMethod() != null)
.Select(pi
=> $"{pi.Name} = {Convert.ToString(pi.GetGetMethod().Invoke(parms, null))}")
)
);
这行代码抛出
TargetException
有消息说对象与目标类型不匹配。
方法
paramhämtare.HämtaParametrar
创建是从NSubstitute mock对象创建的,该对象执行以下操作:
paramhämtareMock.HämtaParametrar(new string[] { }, null).ReturnsForAnyArgs(new TestkörningParams());
我看不出parms对象对于从
körningsparametrarKlass
,它与为
反对。
检查VS Watch窗口中的变量可以得到以下结果:
如您所见,AssemblyQualifiedName与
帕姆斯
krningsparametrarKlass公司
==
,但我也用
körningsparametrarKlass.Equals(parms.GetType())
同样的结果。还要注意,手表窗口中的所有行实际上都是最新的,即使有些是灰色的-我刷新了他们之前,采取的转储。
这怎么可能发生,我该怎么解决?
我还应该提到,只有当我在同一个解决方案中同时为这个测试项目和另一个测试项目运行测试时,这种情况才会发生。如果我只运行有问题的测试,或者运行包含它的整个测试项目,则没有例外。
[编辑]
在我看来,当类型对象从
AssemblyQualifiedName
在测试组件内。这个类型的对象显然不同于
typeof(TheClass)