我有一个返回接口FormatService的工厂:

public class FormatServiceFactory {
    public FormatService getService() {
        ...
    }
}

是否可以模拟该工厂,以便在我们的单元测试中始终返回FormatService - FormatServiceStub的存根实现?

#1楼 票数:1 已采纳

要看。 被测代码如何获得/使用工厂?

如果在您要测试的方法中显式实例化了它,或者它是一个静态工厂,则将无法对其进行模拟。

如果将其注入到测试对象中,则可以在执行测试之前创建并注入模拟工厂。

使用JMock模拟工厂应该很容易。 从示例代码来看,它看起来像是一个类,而不是接口,因此您需要在JMock 1的cglib软件包中使用JMock的cglib版本和MockObjectTestCase类,在JMock 2的ClassImposteriser中使用。

一旦被模拟,您可以在定义getService()方法的期望时使其返回已存根的实现(甚至是模拟FormatService)。

#2楼 票数:0

模拟嘲笑= new JUnit4Mockery(){{setImposteriser(ClassImposteriser.INSTANCE);}};

最终的FormatServiceFactory工厂= mockery.mock(FormatServiceFactory .class);

context.checking(new Expectations(){{oneOf(factory).getService(); will(returnValue(new FormatServiceMock()));}}));

  ask by brasskazoo translate from so

未解决问题?本站智能推荐:

3回复

单个实现者接口是否用于单元测试反模式?

关于单元测试,我被告知生产代码中不应包含与测试相关的代码。 好吧,我觉得每次尝试进行单元测试时我都违反了规则。 我的程序集内部有一个类, Xyzzy 。 我希望依赖将它注入另一个类,然后将其存根,以便我可以IXyzzy测试另一个类,所以我创建了一个接口, IXyzzy 。 哎呀,
2回复

使用Moq模拟IDataRecord

我试图模拟IDataRecord接口。 到目前为止,我有: 但是Visual Studio在最后一行抛出了一个编译错误: 错误2无法将带有[]的索引应用于类型为“Moq.Mock <System.Data.IDataRecord>”的表达式 有什么建议?
2回复

为什么我们使用接口来模拟 Golang 的方法

我是 Golang 的新手,一直在探索但不清楚单元测试中的模拟。 任何人都可以解释以下具体问题吗? 问题 1 :为了在 Golang 中编写单元测试,为什么我们需要有接口来模拟方法,为什么不仅仅是 struct ? 问题2 :为什么我们在struct中注入接口(我们调用外部方法的地方) 随着结
1回复

如何使用 Go 的 moq 模拟 http.Handler?

我对创建一个httptest.Server感兴趣, httptest.Server记录调用它的请求。 为此,我想使用github.com/matryer/moq库。 为了为http.Handler生成一个模拟,我将它的定义复制到一个名为client的包中: 然后我跑了 在client目录中
1回复

不能在单元测试中使用模拟接口类

我试图在我的单元测试中模拟一个方法,但我无法从服务调试到该方法。 我有一个使用方法 DoSomething1 的服务,我想测试: 这是我的测试课: 如果我现在调试它,我可以进入 MyService 但我无法调试进入 它将无法通过我的测试。 使用这个工作,但似乎是不好的做法: 我错
1回复

在golang中使用接口来模拟第三方库

我正在尝试创建一个简单的模拟器,用于使用VMware vSphere API客户端 - govmomi对单个代码进行单元测试 - 但是我无法找到可用的模式。 客户端库的一个简单用例是检索vSphere集群的已安装许可证: NewClient()返回一个指向客户机结构, Client
4回复

使用Soley接口来促进单元测试中的顽固和模拟现在已经过时了?

在.NET中,TypeMock Isolator和Microsoft Moles允许隔离任何类,属性或方法 - 无论是密封的,静态的,受保护的还是非虚拟的。 所以在Moq或Rhino Mocks中不可能嘲笑,现在不再是这样了。 我总是对使用接口只是为了能够允许模拟的想法感到厌恶,否则只有
2回复

使用Jmock创建一个mock来为自己返回一个null值

我有一个类似于以下方法: 我试图找到一种方法来设置MyClass参数c的模拟实例,使其为自身返回null值,并且永远不会调用c.someMethod()。 我的单元测试看起来像这样: 基本上,我正在设置一个MyClass的模拟实例,并设置它的期望值,当它的值被测试为空值时,它将