我们什么时候可以模拟一个对象及其方法?

时间:2010-05-10 06:58:39

标签: .net moq

我是Moq和单元测试的新手。我必须将单元测试编写到许多具有其他类对象的类中。我可以模拟类对象的方法。这是确切的场景 -

我有一个类A和B两个类,A有一个B的私有对象,在A的方法中,我在内部调用B的方法,然后做一些计算并返回结果。我可以在这个场景中模仿B的方法吗?请尽量详细介绍我可以模拟课程方法和功能的条件。感谢名单

1 个答案:

答案 0 :(得分:1)

是的,你可以嘲笑B的方法。

最简单的方法是在创建它时将B的实例传递给A的构造函数。

在你的单元测试中,你可以创建一个B的模拟并将其传入。通常,您可以很容易地模拟您传入的任何对象或从对象外部进行设置。所以任何东西都传递给构造函数或在属性上设置。可能有可能模拟私有变量,虽然我不太了解Moq肯定会说,但通常通过重构代码以使依赖对象传递给它来更好地完成。

如果B实现了一个接口,IB,那么你会做这样的事情:

var mockB = new Mock<IB>();
mockB.Setup(x => x.SomeMethod()).Returns([whatever value you want to return]);
var a = new A(mockB.Object);

注意:此代码是C#并且来自内存,因此可能不正确。这更像是一个普遍的想法。

之后你可以在a上调用你的方法,它将使用你在设置中的Returns方法中放入的任何值来进行计算。