using System;
using System.Collections.Generic;
using System.Linq;
using NUnit.Framework;
namespace UnitTest.Model
{
[TestFixture]
public class SampleEquatableObjectTest
{
[Test]
public void TwoIdenticalUsersComparedEqualTrue()
{
var user1 = new SampleObject { Id = 1, Name = "Test User" };
var user2 = new SampleObject { Id = 1, Name = "Test User" };
Assert.IsTrue(user1.Equals(user2));
}
[Test]
public void TwoDifferentUsersComparedEqualFalse()
{
var user1 = new SampleObject { Id = 1, Name = "Test User 1" };
var user2 = new SampleObject { Id = 2, Name = "Test User 2" };
Assert.IsFalse(user1.Equals(user2));
}
[Test]
public void CollectionOfUsersReturnsDistinctList()
{
var userList = new List<SampleObject>
{
new SampleObject {Id = 1, Name = "Test User"},
new SampleObject {Id = 1, Name = "Test User 1"},
new SampleObject {Id = 2, Name = "Test User 2"}
};
Assert.AreEqual(userList.Count, 3);
var result = userList.Distinct();
Assert.AreEqual(result.Count(), 2);
var multipleTest = (from r in result group r by new { r.Id } into multGroup where multGroup.Count() > 1 select multGroup.Key).Any();
Assert.IsFalse(multipleTest);
}
public class SampleObject : IEquatable<SampleObject>
{
public int Id { get; set; }
public string Name { get; set; }
public bool Equals(SampleObject other)
{
if (ReferenceEquals(this, other))
return true;
if (ReferenceEquals(other, null) || ReferenceEquals(this, null))
return false;
return Id.Equals(other.Id);
}
}
}
}Linq Distinct не работает, как на форуме и Microsoft примеры
Четкий метод в этом тесте не возвращает отличный список. Утверждение для count не будет выполнено. Я рассмотрел другие подобные вопросы и примеры Microsoft, но они выглядят точно так же, как и код, который у меня есть в тесте. Любой вход?
Вы уверены, что ваш метод .Equals вызывается, и он не использует оператор ==? – BlackICE
[This post] (http://stackoverflow.com/questions/1365748/distinct-not-working-with-linq-to-objects) охватывает большую часть той же информации. –