1 回答
TA贡献1877条经验 获得超6个赞
您似乎没有正确设置预期对象。
例如,使用GetNames()这样的实现:
public class Foo
{
public IEnumerable<INamed> GetNames()
{
return new[] {
new ComplexEntity() { Id = 1, Name = "NAM1", Domain = "DOM1" },
new ComplexEntity() { Id = 2, Name = "NAM2", Domain = "DOM2" }
};
}
}
以下 xUnit + ExpectedObjects 测试将通过:
using ConsoleProject;
using ExpectedObjects;
using Xunit;
namespace ConsoleProject_Tests
{
public class ExpectedObjectsTests
{
[Fact]
public void GetNames_should_return_INamed_ExpectedObjects_Style()
{
var expected = new[]
{
new { Name = "NAM1" },
new { Name = "NAM2" }
}.ToExpectedObject();
var systemUnderTest = new Foo();
var actual = systemUnderTest.GetNames();
expected.ShouldMatch(actual);
}
}
}
请注意,ToExpectedObject()正在提供匿名对象,而不是具体类。
IEqualityComparer<INamed>现在将其与通过实现恰巧在测试类上的自定义来执行操作的旧方法进行比较......
using ConsoleProject;
using System;
using System.Collections.Generic;
using Xunit;
namespace ConsoleProject_Tests
{
public class ClassicXUnitTests : IEqualityComparer<INamed>
{
bool IEqualityComparer<INamed>.Equals(INamed x, INamed y)
{
if (x == null && y == null) return true;
if (x == null || y == null) return false;
return String.Equals(x.Name, y.Name);
}
int IEqualityComparer<INamed>.GetHashCode(INamed obj)
{
return obj.Name.GetHashCode();
}
[Fact]
public void GetNames_should_return_INamed_xUnit_Style()
{
var expected = new[]
{
new SimpleEntity() { Name = "NAM1" },
new SimpleEntity() { Name = "NAM2" }
};
var systemUnderTest = new Foo();
var actual = systemUnderTest.GetNames();
Assert.Equal<INamed>(expected, actual, this);
}
}
}
它仍然需要一个具体的类来实现,INamed因为您不能只创建一个新的抽象类或接口。
- 1 回答
- 0 关注
- 123 浏览
添加回答
举报