有什么方法可以检索被插入到伪造类中的假对象吗?
例如。
假设我有下面的接口+类;
public interface IFakeable
{
void FakeYou();
}
public class SomeClass
{
private readonly IFakeable _fake;
public SomeClass(IFakeable fake)
{
_fake = fake;
}
public void FakeCall()
{
_fake.FakeYou();
}
}并想测试以下内容:
[TestFixture]
public class SomeClassTests
{
[Test]
public void FakeCall_CallsIFakeabl_FakeYou()
{
var subject = A.Fake<SomeClass>();
subject.FakeCall();
A.CallTo(() => A.Fake<IFakeable>().FakeYou()).MustHaveHappened();
}
}如果不公开SomeClass._fake字段,这是可能的吗?
有什么地方我可以指定用单身汉做假货吗?
发布于 2016-04-28 22:31:35
如果测试的主题是SomeClass,你为什么要假装它?你想考试的是实际的课程,不是假的.所以你应该这么做:
[Test]
public void FakeCall_CallsIFakeabl_FakeYou()
{
var fake = A.Fake<IFakeable>();
var subject = new SomeClass(fake);
subject.FakeCall();
A.CallTo(() => fake.FakeYou()).MustHaveHappened();
}或者,您可以使用FakeItEasy的夹具初始化特征
[TestFixture]
public class SomeClassTests
{
[Fake] public IFakeable Fake {get;set;}
[UnderTest] public SomeClass Subject {get;set;}
[SetUp]
public void Setup()
{
Fake.InitializeFixture(this);
}
[Test]
public void FakeCall_CallsIFakeabl_FakeYou()
{
Subject.FakeCall();
A.CallTo(() => Fake.FakeYou()).MustHaveHappened();
}
}发布于 2016-04-28 19:50:14
这里更重要的是为什么要测试在私有字段上调用的方法。私有字段封装在类中,因此该方法在该字段上所做的任何操作都构成“类的内部结构”,与测试无关。我假设FakeYou()实现有一些重要的副作用,需要进行测试。在这种情况下,我将测试subject.FakeCall()之后的副作用,而不是测试FakeCall是否已经发生。
或者,您可以将_fake更改为公共字段,并更改:
A.CallTo(() => A.Fake<IFakeable>().FakeYou()).MustHaveHappened();至:
A.CallTo(() => subject._fake.FakeYou()).MustHaveHappened();如果C#约定是这样的,您可能希望将“C#”重命名为“假”,就像ReSharper会告诉您的那样。
https://stackoverflow.com/questions/36923628
复制相似问题