4

DateTime2つのオブジェクトのすべてのプロパティを比較する最良の方法はDateTime.ToString()?

私は2つのアサーションを使用してそれを行うことができました:

o1.ShouldHave().AllPropertiesBut(dto1 => dto1.Date).EqualTo(o2);
o1.Date.Should().Be(DateTime.Parse(o2.Date));

私は次のことを考えますが、EqualTo<T>()無効であるためコンパイルされません。

o1.ShouldHave().AllProperties().But(d => d.Date).EqualTo(o2)
.And.Date.Should().Be((DateTime.Parse(o2.Date));

タイプは次のとおりです。

public class Dto1
{
    public int ID { get { return 1; } }
    public DateTime Date { get { return DateTime.Now.Date; } }
}

public class Dto2
{
    public int ID { get { return 1; } }
    public string Date { get { return DateTime.Now.Date.ToShortDateString(); } }
}

var o1 = new Dto1();
var o2 = new Dto2();
4

1 に答える 1

2

通常、最初の例が最良の方法です。ただし、o1 と o2 を切り替えると、1 回の呼び出しで機能する可能性があります。Fluent Assertions は、(Convert.ChangeType を使用して) プロパティの実際の値を同じ名前のプロパティの期待値に変換しようとします。特定の例では、値を比較する前に、Dto1 の DateTime を Dto2 の文字列に変換しようとします。ただし、DateTime の文字列表現はスレッドのカルチャに依存するため、予測可能な結果は得られません。ただし、o1 と o2 を切り替える場合、Convert.ChangeType が短い日時を DateTIme オブジェクトに正常に変換しても驚かないでしょう。

補足として、私の DTO は通常、文字列を変換せずに DateTime を呼び出し元に渡すだけです。DateTime の実際の表現は、純粋に UI の責任だと思います。

HTH

デニス

于 2012-01-31T19:32:16.153 に答える