首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FakeItEasy -检索伪造对象

FakeItEasy -检索伪造对象
EN

Stack Overflow用户
提问于 2016-04-28 19:17:00
回答 2查看 677关注 0票数 2

有什么方法可以检索被插入到伪造类中的假对象吗?

例如。

假设我有下面的接口+类;

代码语言:javascript
复制
public interface IFakeable
{
    void FakeYou();
}

public class SomeClass
{
    private readonly IFakeable _fake;

    public SomeClass(IFakeable fake)
    {
        _fake = fake;
    }

    public void FakeCall()
    {
        _fake.FakeYou();
    }
}

并想测试以下内容:

代码语言:javascript
复制
[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字段,这是可能的吗?

有什么地方我可以指定用单身汉做假货吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-28 22:31:35

如果测试的主题是SomeClass,你为什么要假装它?你想考试的是实际的课程,不是假的.所以你应该这么做:

代码语言:javascript
复制
[Test]
public void FakeCall_CallsIFakeabl_FakeYou()
{
    var fake = A.Fake<IFakeable>();
    var subject = new SomeClass(fake);

    subject.FakeCall();

    A.CallTo(() => fake.FakeYou()).MustHaveHappened();
}

或者,您可以使用FakeItEasy的夹具初始化特征

代码语言:javascript
复制
[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();
    }
}
票数 3
EN

Stack Overflow用户

发布于 2016-04-28 19:50:14

这里更重要的是为什么要测试在私有字段上调用的方法。私有字段封装在类中,因此该方法在该字段上所做的任何操作都构成“类的内部结构”,与测试无关。我假设FakeYou()实现有一些重要的副作用,需要进行测试。在这种情况下,我将测试subject.FakeCall()之后的副作用,而不是测试FakeCall是否已经发生。

或者,您可以将_fake更改为公共字段,并更改:

代码语言:javascript
复制
A.CallTo(() => A.Fake<IFakeable>().FakeYou()).MustHaveHappened();

至:

代码语言:javascript
复制
A.CallTo(() => subject._fake.FakeYou()).MustHaveHappened();

如果C#约定是这样的,您可能希望将“C#”重命名为“假”,就像ReSharper会告诉您的那样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36923628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档