1

2つのオブジェクト(およびそれらのコレクション)をテストしていますが、同じタイプであっても失敗します。

ここに画像の説明を入力してください

私はいくつかの調査を行いましたが、それはおそらく参照のためであり、それらは異なる可能性があります。ただし、それでも同じタイプであり、どのAssertメソッドを使用するかわかりません。(CollectionAssert.AreEquivalentも失敗します)。

編集済み

また、各フィールドの値が同じであるかどうかを確認しようとしています。その場合、各フィールドに対してAssert.AreEqualを実行する必要がありますか?

-ありがとう、すべての答えは役に立ちました

4

4 に答える 4

3

Assert.AreEqual2つのオブジェクトが同じであるかどうかをチェックしますが、単に同じタイプであるかどうかはチェックしません。それを行うには、次のようにします。

Assert.AreEqual(A.GetType(), B.GetType());
于 2012-12-11T17:49:28.720 に答える
3

オブジェクトのタイプを比較する必要があります。正しく識別したように、オブジェクトのコンテンツは異なる場合があり、そのため、それらは等しいとは見なされません。

次のようなものを試してください

Assert.AreEqual(typeof(ObjectA), typeof(ObjectB))

于 2012-12-11T17:48:37.970 に答える
2

dtoオブジェクトの値を比較する場合はEqualsGetHashCodeメソッドをオーバーライドする必要があります。

たとえば、クラスが与えられた場合:

public class DTOPersona
{
    public string Name { get; set; }
    public string Address { get; set; }
}

同じ名前(ただしアドレスではない)のDTOPersonaクラスの2つのオブジェクトが同等のオブジェクト(つまり同じ人物)であると考える場合、コードは次のようになります。

public class DTOPersona
{
    public string Name { get; set; }
    public string Address { get; set; }

    protected bool Equals(DTOPersona other)
    {
        return string.Equals(Name, other.Name);
    }

    public override bool Equals(object obj)
    {
        if (ReferenceEquals(null, obj))
        {
            return false;
        }
        if (ReferenceEquals(this, obj))
        {
            return true;
        }
        if (obj.GetType() != this.GetType())
        {
            return false;
        }
        return Equals((DTOPersona) obj);
    }

    public override int GetHashCode()
    {
        return (Name != null ? Name.GetHashCode() : 0);
    }
}
于 2012-12-11T17:56:04.233 に答える
0

いくつかの比較ロジックを追加しないと、クラスインスタンスがデータの観点から別のインスタンスと同じであるかどうかを知ることができません。

すべてのフィールドの値が同じかどうかを確認するには、 Object.GetHashCodeメソッド とObject.Equalsメソッドをオーバーライドします。

フィールドごとの比較を行うことも機能します。

于 2012-12-11T17:57:13.493 に答える