xUnit.netでは似たようなユニットテストツールで一般的な「Test」のような属性名ではなく「Fact」と「Theory」の2種類の属性名を用いる。
- Fact - 不変条件のテスト。いわゆる普通のTestがこれ。
- Theory - 特定のデータセットのみに当てはまるテスト
Factは類似品で一般的なTestに相当する。 一方、Theoryは特定のデータのときにのみ作用するテストに用いるxUnit.net独特の考え方である。 たとえば奇数を判別するアルゴリズムのテストをしたとする。 そのアルゴリズムに偶数を渡すとテストは失敗するが、アルゴリズムやテストが間違っているわけではなく正しい動作である。
以下のコードは意図的に悪いデータを含めているので失敗する。
[Theory]
[InlineData(3)]
[InlineData(5)]
[InlineData(6)]
public void MyFirstTheory(int value)
{
Assert.True(IsOdd(value));
}
bool IsOdd(int value)
{
return value % 2 == 1;
}