Я получаю 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;
}
}