gpt4 book ai didi

c# - FakeItEasy - 检索伪造的对象

转载 作者:行者123 更新时间:2023-11-30 20:36:28 25 4
gpt4 key购买 nike

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

例如

假设我有以下接口(interface) + 类;

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 字段的情况下实现?

有什么地方我可以指定使用单例来伪造吗?

最佳答案

如果测试的主题是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 的 fixture initialization feature :

[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();
}
}

关于c# - FakeItEasy - 检索伪造的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36923628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com