【发布时间】:2013-01-02 18:48:57
【问题描述】:
我想重用通用测试,但是如何获取通用测试数据?
我编写了自己的IReadOnlyCollection<T> 接口,并编写了一些使用它的类。
由于该接口的方法和属性(例如Contains、CopyTo)应该始终完全相同,无论实现它的类如何,我想编写可以应用于任何实现的通用测试。使用this post 中建议的方法,我现在有以下内容:
// Tests that must work for any type T:
public abstract class IReadOnlyCollectionTests<T>
{
protected abstract IReadOnlyCollection<T> CreateInstance(params T[] data);
[Test]
public void Contains_GivenExistingValue_ReturnsTrue()
{
// Given
T[] data; // <-- Get some data?
T value = data[1];
var sut = CreateInstance(data);
// When
bool result = sut.Contains(value);
// Then
Assert.IsTrue(result);
}
// 40 more such tests...
}
现在我需要一些数据进行测试。类型 T 可以是布尔值、字符串或任何值。 我如何获得一些适用于任何类型T 的通用数据?
顺便说一句:我将通过为每个实现派生一个测试类来运行这个通用测试,就像我的BitArray 实现(布尔集合)的这个类:
[TestFixture]
public class BitArrayROC : IReadOnlyCollectionTests<bool>
{
protected override IReadOnlyCollection<bool> CreateInstance(params bool[] data)
{
return new BitArray(data);
}
}
类似于BitArray,我有一个StringCollection 类(以及其他),我想为其测试IReadOnlyCollection<T> 实现。
【问题讨论】:
-
由于每个泛型类型 (T) 的实现都相同,所以我不会再测试这个类了。只写一个测试类,用一些通用参数(例如
Object)测试你的ReadOnlyCollection<T> -
提到不同的
T(BitArray,StringCollection)的实现是不同的。
标签: c# unit-testing nunit test-data