gpt4 book ai didi

c# - 使用 FakeItEasy 在方法中模拟方法

转载 作者:太空狗 更新时间:2023-10-30 00:31:53 24 4
gpt4 key购买 nike

我如何模拟/伪造另一个函数调用的函数的结果?通常 Test2 是我不喜欢获取真实数据的 DataAccess 方法。我喜欢我的单元测试来测试业务逻辑。

这就是我现在拥有的,但它根本不起作用。 Sum 始终断言为 5!

public int Test1()
{
var value = this.Test2(); //Unittest should substitute with 5
var businesslogic = value + 10; //The business logic

return businesslogic;
}

public int Test2()
{
return 10; //I try to mock this value away in the test. Don´t go here!
}

然后我有一个单元测试,我想在我的“业务逻辑”上运行。

[TestMethod()]
public void TestToTest()
{
//Arrange
var instance = A.Fake<IClassWithMethods>();

//Make calling Test2 return 5 and not 10.
A.CallTo(() => instance.Test2()).Returns(5);

//Call the method
var sum = instance.Test1();

//Assert if the business logic in the method works.
Assert.AreEqual(15, sum);
}

最佳答案

据我所知,你不能那样做。

您的 instance 不是真实类的实例,只是其接口(interface)上的模型,因此调用 instance.Test1() 不会调用代码你上面描述的。但是,您可以单独使用 UnitTest Test2 方法。

然而,您可以做的是进行 2 个单元测试。

在第一个测试(测试方法 Test2)中,您使用必要的依赖项(或者如果不存在与某些值/参数的依赖项)实例化您的类。

然后进行第二次测试,输入参数相同,测试Test()方法。

模型仅用于您必须在接口(interface)上进行模拟的依赖项(在您测试的类的外部实例化)。即,如果您有 ClassAClassB 并且 ClassA 取决于 IClassB 接口(interface)。然后你可以模拟 B 来测试 A。

关于c# - 使用 FakeItEasy 在方法中模拟方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21733861/

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