我创建了一个泛型类,如下所示,当我编写它并在Visual Studio中测试程序时,它非常有效。但是,在自动构建中,虽然之前没有看到编译或运行时错误,但是运行了一个单元测试,该测试无法处理程序集:
错误18处理汇编期间发生错误' .... dll':提供的通用参数的数量不等于泛型类型定义的arity。 参数名称:instantiation ...测试
单元测试没有使用泛型类。
我注释掉了类中的所有代码,构造函数,字段,然后使用Visual Studio自动实现了接口,使用"生成新的NotImplementedException()"生成存根。
public class RequiredPropertiesProfile<TPropertyGroup, TProperty>
: IDictionary<bool, IDictionary<TPropertyGroup, ICollection<TProperty>>>
{
// auto implementations of IDictionary, with throw new NotImplementedException();
}
它再次编译,但编译单元测试再次失败,没有明显的原因。测试有&#34; Microsoft.VisualStudio.QualityTools.UnitTestFramework&#34;引用。
该类主要用于定义属性配置,需要设置或不设置(bool)。它应该是通用的,具有字符串(用户友好,包括辅助类),数据对象或数据库标识符(int类型),以及将其中一个转换为另一个的其他方法。
我发现了几篇关于这个错误的文章,但是没有一篇适合我的情况 - 特别是首先编译和运行没有错误,然后在一个愚蠢的单元测试中磕磕绊绊,甚至没有使用泛型类。
答案 0 :(得分:0)
虽然这不是解决问题原因的答案,但它有助于创建一个具有完全通用接口的基类,然后将我的实现置于第一级类型 bool 的顶部:
public class RequiredPropertiesGenericBase<TState, TPropertyGroup, TProperty>
: IDictionary<TState, IDictionary<TPropertyGroup, ICollection<TProperty>>>
{
private _innerDict = new Dictionary<TState, IDictionary<TPropertyGroup, ICollection<TProperty>>>();
// _innerDict wrapping methods;
}
public class RequiredPropertiesProfile<TPropertyGroup, TProperty>
: RequiredPropertiesGenericBase<bool, TPropertyGroup, TProperty>
{
public RequiredPropertiesProfile(IEnumerable<PropSetting> settings)
{
foreach (var set in settings)
{
this.AddPropertySetting(set.MustBeSet, set.PropertyGroup, set.Property);
}
// ...
}
// implementation
}
我仍然不知道是什么造成了这种情况,初始代码会编译运行仍然很奇怪,但是在单元测试中偶然发现甚至没有创建类的实例(但是使用它& #39;集会)。
问题会出现在几台机器上,首先是在带有自动化单元测试的构建机器上(通常在构建/测试之前进行全面清理)。然后在工作站上运行单元测试时。
在删除构造函数(只保留auto构造函数)和除伪接口实现之外的所有代码之后,在初始版本中仍然出现问题,并且该类没有被使用。