如何在测试阶段强制maven使用我的模拟版本的依赖项

时间:2010-03-31 23:16:56

标签: maven-2

所以我有一个Java应用程序,可以访问一些Web服务。我想模拟相应的类,所以我可以使用一些硬编码的请求/响应,我希望maven在测试期间无缝地使用它们,并在最终构建期间忽略它们。

我想要maven2:

1)编译我的模拟类
2)编译依赖于模拟代码的主类 3)运行测试
4)重新编译具有真实依赖性的任何主类,而不是我的模拟
5)完成maven安装

理想情况下,我想将我的模拟类命名为与我的主类相同,并将它们保存在src / test / mocks中。我是maven的新手,到目前为止看起来maven只会编译src / main然后src / test但是我希望我可以按照自己的方式进行操作。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

这不是你问题的直接答案,但我相信这是一个更好的方法。

Code to interfaces instead of concrete classes。您将拥有接口和模拟实现的生产实现。你甚至可以疯狂地使用jMockEasyMock来编写你的模拟。这可能有点过于狂野: - )

使用dependency injection在生产中注入生产类,并在单元测试中模拟类。

你的模拟可以完全存在于./src/test/java中。您可以在测试源中添加不同的目录,但阻力最小的路径就是只有一个名为“mocks”的包。 Maven更喜欢使用约定优于配置。

答案 1 :(得分:0)

为这些测试制作另一个maven项目。可能有其他选择,但它们会让人感到困惑和难以维持。

答案 2 :(得分:0)

Maven没有这样的工作流程(特别是第4步),实现一些接近的工作肯定不会很简单。我的建议是使用某种带有“测试配置”的DI框架在测试期间在运行时注入你的模拟。