そのアプローチは、私が自分で行うことと非常によく似ています。ほとんどすべての自動化されたテストは、実際の結果が期待される結果と等しいかどうかをテストすることを中心に展開されていることを考えると、人々が同等性自体を単体テストしたくない理由がまったくわかりませんでした。
上記のような値オブジェクトを使用すると、非常によく似た多くのテストが発生するため、簡単に少し面倒になる可能性があります。
xUnit.net で使用できる 1 つのハックは次のとおりです。
[Theory]
[InlineData("other first name", null, null, null, null, null, null)]
[InlineData(null, "other last name", null, null, null, null, null)]
[InlineData(null, null, "other company", null, null, null, null)]
[InlineData(null, null, null, "other street", null, null, null)]
[InlineData(null, null, null, null, "other city", null, null)]
[InlineData(null, null, null, null, null, "other zip", null)]
[InlineData(null, null, null, null, null, null, "other@email.com")]
public void EqualsIsFalseWhenAtLeastOneValueDiffers(
string firstName,
string lastName,
string company,
string street,
string city,
string zip,
string email)
{
Fixture fix = new Fixture();
var sut = fix.CreateAnonymous<CoreAddress>();
var other = new CoreAddress(
firstName ?? sut.Firstname,
lastName ?? sut.Lastname,
company ?? sut.Company,
street ?? sut.Street,
city ?? sut.City,
zip ?? sut.Zip,
email ?? sut.Email);
Assert.False(sut.Equals(other));
}
ただし、コンパクトですが、テスト自体の循環的複雑度が8であるため、このようなことをすることにあまり熱心ではありません.これは約7です.入力値のわずかな設定ミスだけでテストが台無しになる可能性があります.そして最終的に、偽陽性または偽陰性のいずれかを生成します。
一方、ここでは私たちは皆プログラマーです。同じことが繰り返されるようになったら、どうすればよいでしょうか。
退屈をなくすコードを書いてください。これは基本的にAutoFixture.Idiomsプロジェクトのすべてです。現在、上記のようなカプセル化されたテストはありませんが、将来的には取得される可能性があります... オープン ソースであり、プル リクエストを時折受け付けています。 ;)