2

さまざまなタイプのいくつかのフィールド/プロパティなどを持つクラスがあります:

public string SomeStringData;
public int? SomeNullableIntegerData;
public SomeDataClass SomeSpecificData;
public int SomeIntegerData;

私のコードの一部では、 のみを入力するSomeStringData必要があり、それを明示的にテストしたいと思います。私はFluentAssertionsを使用しており、

actual.SomeStringData.Should().Be("Whatever");

しかし、他の要素がどれも変更されておらず、デフォルト値のままであることをテストするにはどうすればよいでしょうか? もちろん、次のことができます。

actual.SomeNullableIntegerData.Should().NotHaveValue("Must have no value.");
actual.SomeDataClass.Should().BeNull("Must have no value.");
actual.SomeNullableIntegerData.Should().Be(0, "Must have no value.");

しかし、これらの項目にデフォルト値が必要であることをより明確に表現するにはどうすればよいでしょうか?

たとえば、虚数BeDefault演算子の場合のように:

actual.SomeNullableIntegerData.Should().BeDefault("Must have no value.");
actual.SomeDataClass.Should().BeDefault("Must have no value.");
actual.SomeNullableIntegerData.Should().BeDefault("Must have no value.");

そのようなオプションはありますか?

4

2 に答える 2

4

拡張メソッドを作成します

public static void ShouldHaveDefaultValue<T>(this T value)
{
    if (!EqualityComparer<T>.Default.Equals(value, default(T)))
        throw new AssertionException("Must have default value.");
}

使用法:

actual.SomeNullableIntegerData.ShouldHaveDefaultValue();
actual.SomeDataClass.ShouldHaveDefaultValue();
actual.SomeIntegerData.ShouldHaveDefaultValue();

、などのさまざまなアサーションオブジェクトを返すさまざまな拡張機能があるため、拡張Should()BeDefault()困難です。また、このすべてのアサーションクラスには、拡張できる共通の基本クラスがありません。Should()BooleanAssertionsStringAssertionsGuidAssertions

于 2014-03-06T12:21:46.793 に答える
0

以前の値を前もって取得し、変更を行うと想定されているものを実行した後でも、それらの値にはまだデフォルト値があると主張します。その提案されたBeDefault方法は、「デフォルト」についていかなる仮定も行うことができません。

于 2014-03-06T10:52:01.303 に答える