일반 테스트를 재사용하고 싶지만 어떻게 일반 테스트 데이터를 얻을 수 있습니까?일반 단위 테스트를위한 일반 테스트 데이터 얻기
나는 내 자신의 IReadOnlyCollection<T>
인터페이스를 쓰고, 그것을 사용하는 일부 클래스를 썼다.
해당 인터페이스의 메소드와 속성 (예 : Contains
, CopyTo
)은 구현 클래스에 관계없이 항상 똑같이 작동해야하므로 모든 구현에 적용 할 수있는 일반적인 테스트를 작성하고 싶습니다.
// 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...
}
는 지금은 함께 테스트하기 위해 일부 데이터가 필요 this post에서 제안 된 접근 방식을 사용하여, 나는 이제 다음 있습니다. 유형 T
은 부울 또는 문자열 등일 수 있습니다. 어떤 유형의 데이터에도 사용할 수있는 일반 데이터를 얻으려면 어떻게해야합니까? T
? 그런데
: 내 BitArray
구현을위한 이와 같은 각 구현을위한 테스트 클래스를 파생하여이 일반적인 테스트를 실행합니다 (논리 값의 집합) : 유사
[TestFixture]
public class BitArrayROC : IReadOnlyCollectionTests<bool>
{
protected override IReadOnlyCollection<bool> CreateInstance(params bool[] data)
{
return new BitArray(data);
}
}
BitArray
에 이르기까지 IReadOnlyCollection<T>
구현을 테스트하려는 StringCollection
클래스가 있습니다.
구현은 모든 일반 유형 (T)에 대해 ** 동일한 **이므로이 클래스를 한 번 더 테스트하지는 않습니다. 'ReadOnlyCollection'을 일반적인 일반 인자 (예 :'Object')로 테스트하는 하나의 테스트 클래스를 작성하십시오. –
구현시 'T'('BitArray','StringCollection')마다 다름을 언급했습니다. –