Java jUnit+;jMock和log4j

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:

我给了一个任务,在其他程序员创建的程序上执行JUnit+JMock。大多数类别都有静态现场记录器,即:

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会工作吗?