0

我创建了一个通用类,如下所示,当我对其进行编码并在 Visual Studio 中测试程序时,它运行良好。但是,在自动构建中,运行了一个无法处理程序集的单元测试,尽管之前没有看到编译或运行时错误:

错误 18 处理程序集“....dll”期间发生错误:提供的泛型参数的数量不等于泛型类型定义的数量。参数名称:实例化...Test

单元测试没有使用泛型类。

我注释掉了类中的所有代码、构造函数、字段,然后使用 Visual Studio 自动实现接口,生成带有“throw new NotImplementedException()”的存根。

public class RequiredPropertiesProfile<TPropertyGroup, TProperty> 
    : IDictionary<bool, IDictionary<TPropertyGroup, ICollection<TProperty>>>
{
    // auto implementations of IDictionary, with throw new NotImplementedException();
}

它再次编译,但编译单元测试再次失败,没有明显的原因。该测试引用了“Microsoft.VisualStudio.QualityTools.UnitTestFramework”。

该类主要是定义属性配置,需要设置或者不设置(bool)。它应该是通用的,具有字符串(用户友好,包括帮助类)、数据对象或数据库标识符(int 类型),以及将一个转换为另一个的附加方法。

我发现了几篇关于这个错误的文章,但没有一篇适合我的情况——尤其是首先编译和运行没有错误,然后偶然发现一个愚蠢的单元测试,它甚至没有使用泛型类。

4

1 回答 1

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
}

我仍然不知道是什么原因造成的,初始代码会编译和运行仍然很奇怪,但是偶然发现了一个单元测试,甚至没有创建类的实例(而是使用它的程序集)。

问题会出现在几台机器上,首先是在带有自动化单元测试的构建机器上(通常在构建/测试之前进行全面清理)。然后在工作站上运行单元测试时。

在删除构造函数(只留下自动构造函数)和所有代码(除了假接口实现)之后,问题仍然出现在初始版本中,并且该类在任何地方都没有使用。

于 2014-09-23T10:55:46.807 回答