AssertFailedException в CollectionAssert.AreEquivalent (оба списка заполнены одинаковым содержимым) - PullRequest
1 голос
/ 01 декабря 2011

Я получаю AssertFailedException и не вижу, почему это происходит.

CollectionAssert.AreEquivalent не удалось. Ожидаемая коллекция содержит 1 вхождений . Настоящий Коллекция содержит 0 вхождений.

Код:

[TestMethod]
public void GetDocumentsTest()
{
    List<Document> testDocuments = new List<Document>() {
      new Document(){ Path = "TestDoc1", Language = "DEU" }
    , new Document(){ Path = "TestDoc2", Language = "ENG" }
    };

    string sqlCommand = "SELECT Path, LanguageCode FROM Document WITH(NOLOCK) ORDER BY Id";
    string connectionString = "Data Source=|DataDirectory|\\Documents.sdf;Persist Security Info=False;";
    List<Document> documents = new DataAccessManagerTestMockup().GetDocuments(sqlCommand, connectionString);
// Sql gets same documents with same path and same language

    CollectionAssert.AreEquivalent(testDocuments, documents);
}

Обновление:

namespace FileExporter
{
    public class Document
    {
        public string Path { get; set; }

        public string Language { get; set; }

        public bool Equals(Document y)
        {
            if (object.ReferenceEquals(this, y))
                return true;
            if (object.ReferenceEquals(this, null) || object.ReferenceEquals(y, null))
                return false;
            return this.Path == y.Path && this.Language == y.Language;
        }
    }
}

Обновление 2:

Я думаю, что не стоит ночевать в Кёльне (3 часа езды) и пытаться писать код. Коллега только что сказал мне, что я должен переопределить equals и использовать объект вместо Document.

namespace FileExporter
{
    public class Document
    {
        public string Path { get; set; }

        public string Language { get; set; }

        public override bool Equals(object y)
        {
            if (object.ReferenceEquals(this, y))
                return true;
            if (object.ReferenceEquals(this, null) || object.ReferenceEquals(y, null))
                return false;
            return this.Path == ((Document) y).Path && this.Language == ((Document) y).Language;
        }
        public override int GetHashCode()
        {
        if (this == null)
            return 0;
        int hashCodePath = this.Path == null ? 0 : this.Path.GetHashCode();
        int hashCodeLanguage = this.Language == null ? 0 : this.Language.GetHashCode();

        return hashCodePath ^ hashCodeLanguage;

        }
}

1 Ответ

1 голос
/ 01 декабря 2011

Для успешного выполнения вашего класса Document необходимо реализовать (переопределить) Equals()

. Вы можете легко это проверить:

var d1 = new Document(){ Path = "TestDoc1", Language = "DEU" };
var d2 = new Document(){ Path = "TestDoc1", Language = "DEU" };

Assert.AreEqual(d1, d2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...