gpt4 book ai didi

.net - 如何调用包含对伪造方法的调用的原始方法?

转载 作者:行者123 更新时间:2023-12-04 00:25:45 25 4
gpt4 key购买 nike

我正在使用 MS Fakes。

给出以下类:

public class Person
{
public void SaveQuotes()
{
DoSomething();
}

private void DoSomething()
{
Console.WriteLine("Original DoSomething called.");
}
}

和这个测试:
[TestMethod]
public void TestMethod1()
{
using (ShimsContext.Create())
{
var sut = new ShimPerson();

sut.DoSomething = () => { Console.WriteLine("Called from test"); };

sut.Instance.SaveQuotes();
}
}

当我运行测试时, sut.Instance.SaveQuotes()方法基本上被跳过,因为该方法已被填充。我要的是执行原来的 SaveQuotes()方法。所以我试过这个:
[TestMethod]
public void TestMethod1()
{
using (ShimsContext.Create())
{
var sut = new ShimPerson();

sut.DoSomething = () => { Console.WriteLine("Called from test"); };
sut.SaveQuotes = () => { ShimsContext.ExecuteWithoutShims(() => sut.Instance.SaveQuotes()); };

sut.Instance.SaveQuotes();
}
}

当我现在运行测试时,它确实执行了原始 SaveQuotes() ,但作为副作用,它也运行原始 DoSomething()方法也是。

原版如何运行 SaveQuotes()但假冒的 DoSomething() . TypeMock 会这样做 .CallOriginal设置假货时的选项,但我看不到如何在 MS Fakes 中做同样的事情。

最佳答案

好的,我现在明白了。

我不得不改变 ShimBehaviors.InstanceBeahviour属性如下:

[TestMethod]
public void TestMethod1()
{
using (ShimsContext.Create())
{
var sutShim = new ShimPerson();

sutShim.DoSomething = () => { Console.WriteLine("Called from test"); };

sutShim.InstanceBehavior = ShimBehaviors.Fallthrough;

sutShim.Instance.SaveQuotes();
}
}

这告诉 Fakes 调用原来的 SaveQuotes()方法,同时仍然使用伪造的 DoSomething()方法。我发现这是一个很好的引用:

http://www.codewrecks.com/blog/index.php/2012/05/10/shim-and-instancebehavior-fallthrough-to-isolate-part-of-the-sut/

关于.net - 如何调用包含对伪造方法的调用的原始方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21601314/

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