c#-FakeItEasy-伪造的接口继承自抽象,而两者共享相同的接口继承
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-FakeItEasy-伪造的接口继承自抽象,而两者共享相同的接口继承,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1729字,纯文字阅读大概需要3分钟。
内容图文
我有一个界面
public interface IInterface { void DoSomething(); }
另一个界面
public interface IOtherInterface : IInterface { }
抽象类
public abstract class AbstractClass : IInterface
{
public void DoSomething()
{
Console.WriteLine("Got here");
}
}
我正在编写单元测试和伪造的IOtherInterface.抽象类已经包含了一些我想在单元测试中利用的有用方法.我如何制作A.Fake< IOtherInterface>();从AbstractClass继承?
到目前为止,这是我尝试过的方法,但是它不起作用-AbstractClass.DoSomething不会受到攻击.
IOtherInterface fake = A.Fake<IOtherInterface>(builder => builder.Implements(typeof (AbstractClass)));
fake.DoSomething();
当然,如果我做一个代理,如:
var abstractFake = A.Fake<AbstractClass>();
A.CallTo(() => fake.DoSomething()).Invokes(abstractFake.DoSomething);
fake.DoSomething();
……事情如我所愿.是否有内置机制可以实现此目的,所以我不需要该proxy abstractFake对象?
更新
我需要IOtherInterface,因为我有一个需要将该IOtherInterface作为依赖项的客户端类:
class Consumer
{
public Consumer(IOtherInterface otherInterface)
{
otherInterface.DoSomething();
}
}
解决方法:
var fake = (IOtherInterface) A.Fake<AbstractClass>(builder =>
builder.Implements(typeof(IOtherInterface)));
A.CallTo(() => fake.DoSomething()).CallsBaseMethod();
fake.DoSomething();
实施工具仅旨在与接口一起使用,因此使用它的正确方法是伪造接口或类,并使用实施工具添加其他接口.我认为应该向您抱怨,所以我筹集了complain when IFakeOptionsBuilder.Implements is passed a non-interface,已在FakeItEasy 2.0.0中修复.
CallsBaseMethod将确保执行Abstract类的方法.
我会推荐builder.CallsBaseMethods(),但这无法重定向该调用.我认为这是因为它正在重定向AbstractClass.DoSomething,但是当我们将伪造的对象转换为IOtherInterface并调用DoSomething时,它是不匹配的.我已经筹集了investigate interaction between Implements and CallsBaseMethods.
内容总结
以上是互联网集市为您收集整理的c#-FakeItEasy-伪造的接口继承自抽象,而两者共享相同的接口继承全部内容,希望文章能够帮你解决c#-FakeItEasy-伪造的接口继承自抽象,而两者共享相同的接口继承所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。