7

私は単体テストに関してはまったくの初心者なので、これが完全に無知である場合はご容赦ください。しかし、予想される値と実際の値にまったく同じ値を指定しても、このメソッドが単体テストに合格することはありません。ブレークポイントを設定してステップ実行すると、予想される変数と実際の変数の両方が、何とかと何とかという 2 つの項目を含む文字列配列であることが確認されました。ただし、「Assert.AreEqual が失敗しました。Expected: System.String[] Actual:System.String[]」と表示されるたびに、テストは失敗します。

namespace TestProject1

{
 public class Testing
 {
    public string[] PMDate(string lastPm)
    {
        if (string.IsNullOrEmpty(lastPm))
            return new []{"blah", "blah"};
        string[] results = lastPm.Split(new[] {" "}, StringSplitOptions.None);

        if (results.Length < 2)
            return new[] {"blah", "blah"};

        return results;
    }
 }
[TestClass()]
public class UnitTest1
{
    [TestMethod()]
    public void PmDateTest()
    {
        Testing test = new Testing();
        string[] expected = test.PMDate("01/01/1900");
        string[] actual = test.PMDate("01/01/1900");
        Assert.AreEqual(expected, actual);
    }
}

}

4

2 に答える 2

24

テストobject.Equalsでは、配列に対してオーバーライドされない を使用します。つまり、これは false を出力します。

var x = new[] { 0 };
var y = new[] { 0 };
Console.WriteLine(x.Equals(y));

CollectionAssertコレクションには代わりに使用する必要があります。

CollectionAssert.AreEqual(expected, actual);
于 2012-08-21T19:35:34.750 に答える
0

文字列配列が 2 つの異なるオブジェクトであるため、これは失敗しています。同じ値が含まれていても、それらは異なるオブジェクトです。これは、実行時に expected.GetHashcode() と actual.GetHashCode() をチェックすることで簡単に確認でき、ハッシュ コードが異なることがわかります。

于 2012-08-21T19:36:51.083 に答える