gpt4 book ai didi

c# - 伪造一个泛型方法 FakeItEasy

转载 作者:太空狗 更新时间:2023-10-29 23:40:01 24 4
gpt4 key购买 nike

你会如何伪造以下内容:

public interface IBlah
{
Func<T, bool> ApplyFilter<T>(Func<T, bool> predicate) where T:IMessage;
}

我想要的是 fake 简单地返回它的参数而不做任何更改。但是,我想验证假货是否被调用了一次。下面给出了一个用例:

  public class Something
{

public Something(IBlah blah) { _blah = blah; }

public bool DoSomething(SomeValue m, Func<SomeValue, bool> predicate)
{
Func<SomeValue, bool> handler = _blah.ApplyFilter(predicate);
return handler(m);
}
}

即假货需要充当 channel ,但我还需要能够验证它是否已被使用。

解决这个问题的最佳方法是什么?

[请不要担心这个人为设计的示例...幕后发生了很多事情,但我已将其简化为上面的示例。]

最佳答案

这会解决您的问题吗?它将通过谓词并验证是否恰好调用了一次 ApplyFilter

    [Fact]
public void TestFeature()
{
var fake = A.Fake<IBlah>();
A.CallTo(() => fake.ApplyFilter(A<Func<int, bool>>.Ignored)).ReturnsLazily(x =>
{
return x.GetArgument<Func<int, bool>>("predicate");
});
var something = new Something(fake);
var result = something.DoSomething(1, x => x > 1);

Assert.False(result);
A.CallTo(() => fake.ApplyFilter(A<Func<int, bool>>.Ignored)).MustHaveHappened(Repeated.Exactly.Once);
}

关于c# - 伪造一个泛型方法 FakeItEasy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14758455/

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