Java jUnit+;jMock和log4j
我给了一个任务,在其他程序员创建的程序上执行JUnit+JMock。大多数类别都有静态现场记录器,即:Java jUnit+;jMock和log4j,java,junit,log4j,jmock,Java,Junit,Log4j,Jmock,我给了一个任务,在其他程序员创建的程序上执行JUnit+JMock。大多数类别都有静态现场记录器,即: static Log logger = LogFactory.getLog(SomeClass.class.getName()); 我通过在setUp()方法中实例化SomeClass来创建它的实例。当我运行jUnit类时,收到以下错误消息: log4j:ERROR setFile(null,true) call failed. java.io.FileNotFoundException:
static Log logger = LogFactory.getLog(SomeClass.class.getName());
我通过在setUp()
方法中实例化SomeClass来创建它的实例。当我运行jUnit类时,收到以下错误消息:
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: (No such file or directory)
我试图通过调用DOMConfigurator.configure(“log4j.xml”)
在setUp()
方法中,但我仍然收到上面相同的错误消息
问题是:
- 如何在调用其他使用LogFactory.getLog的类的类中运行单元测试+模拟
- 我是否应该在设置方法中配置log4j,以便模拟和单元测试能够正常运行
- 我该怎么做呢
- 使用PowerMock和
- 为测试用例配置log4j.properties
- 您有两个选择
在Maven项目中,第二个选项很简单,因为您只需要在test/resources文件夹中创建log4j.properties。实际上,我有两种类型的问题,我认为是一种,jUnit中的log4j问题。实际上,您可以继续使用jUnit+jMock,即使log4j配置不正确,它也会引发异常,但不会停止jUnit的执行 我遇到的问题是:
1.FileNotFoundException异常,消息为“setFile(null,true)调用失败”
2.jMock意外调用错误 我解决了第1个问题(即使在log4j异常的情况下我仍然可以继续单元测试),方法是放置一个VM参数
-Dlog4j.configuration=file:/C:/log4j/log4j.xml
。我遇到了一个异常,因为它在编译目录(编译java类的默认输出文件夹)中使用log4j.xml。log4j具有此参数
。因此log4j正在寻找一个文件名为${error.file}(不存在)的日志文件。就像我上面说的,我通过在上面放一个VM参数来解决它
学到的经验教训:如果在log4j执行中获得FileNotFoundException,请尝试将-Dlog4j.debug
作为VM参数,以查看log4j从何处提取配置文件。
我通过完成我正在测试的方法中的所有预期对象来解决第2个问题。尽管jMock消息有点模棱两可
经验教训:意外调用通常意味着您的测试方法中缺少一个对象或模拟对象,而这些对象正用于您正在进行单元测试的方法中。这还意味着您没有对它试图调用的对象设置期望值感谢您的响应。我没有选择使用PowerMock,我需要使用jMock。我使用log4j.xml如果我使用属性文件而不是xml版本,DOMConfigurator.configure会工作吗?