鉴于这种系统测试:研究机构Autodata理论使用AutoFixture手动假货
public class MySut
{
private readonly IHardToMockDependency _hardToMockDependency;
public MySut(IHardToMockDependency hardToMockDependency,
IOtherDependency otherDependency)
{
_hardToMockDependency = hardToMockDependency;
}
public string GetResult()
{
return _hardToMockDependency.GetResult();
}
}
public interface IOtherDependency { }
public interface IHardToMockDependency
{
string GetResult();
}
而这个单元测试:
internal class FakeHardToMockDependency : IHardToMockDependency
{
private readonly string _result;
public FakeHardToMockDependency(string result)
{
_result = result;
}
public string GetResult()
{
return _result;
}
}
public class MyTests
{
[Fact]
public void GetResultReturnsExpected()
{
string expectedResult = "what I want";
var otherDependencyDummy = new Mock<IOtherDependency>();
var sut = new MySut(new FakeHardToMockDependency(expectedResult),
otherDependencyDummy.Object);
var actualResult = sut.GetResult();
Assert.Equal(expectedResult, actualResult);
}
}
我应该如何转换它使用AutoFixture.Xunit和AutoFixture。 AutoMoq(同时仍然使用手动假冒)?
在现实世界的测试中,手动假人会有更复杂的界面和行为。请注意,我想将匿名变量(expectedResult字符串)传递给手动伪造的构造函数。
现在,你去拿我手中的金锤。 ;-)但是“内部”在这里与“公共”相比有什么不同? SUT无法以任何方式查看属性,因为它只获取界面。 – TeaDrivenDev 2013-03-16 14:33:49
@GCATNM Result属性是“internal”还是“public”并不重要。就个人而言,我会让它成为'public',但是OP提供了假的'内部'类,所以我只想尽可能少地改变建议的修改以使其更可接受:) – 2013-03-16 14:56:08
哇,三个很好的答案,还有一位来自作者本人!松开假的不变式是很好的。谢谢!只接受一个答案会很艰难 - 我必须尝试这些。 – TrueWill 2013-03-17 01:17:37