我的方法是在这样的Java类中.
//some business logic
String userId = org.apache.logging.log4j.ThreadContext.get("userId"); //I need mocking for this using Spock or Mockito
//more business logic
return map;
}我正试图用Spock框架为上面的方法编写一个测试,而ThreadContext却阻碍了我的工作--我无法模仿它来返回我所希望的字符串。我试图在ThreadContext测试的安装过程中将一个自定义值放入.(没有工作)
def setupSpec() {
ThreadContext.put("userId", "sriram")
}任何想法都很感谢,谢谢。
发布于 2021-01-14 02:35:37
Spock不能直接模拟Java类的静态方法,只有Groovy类。有了其他工具,如Mockito、Powermock、JMockit或我自己的工具Sarek,这是可能的。不过,如果我是你,我就不会走那条路。对我来说,示例代码运行得完美无缺,如下所示:
package de.scrum_master.stackoverflow.q65702384
import org.apache.logging.log4j.ThreadContext
import spock.lang.Specification
class Log4JThreadContextTest extends Specification {
def setupSpec() {
ThreadContext.put("userId", "sriram")
}
def test() {
expect:
ThreadContext.get("userId") == "sriram"
}
}所以ThreadContext.put("userId", "sriram")做你想做的事。如果没有,您的问题与Spock无关,例如:
setupSpec()中,您可能太早了,因为在执行过程中测试的代码设置了相同的属性,例如在//some business logic部分。setupSpec()、setup()中还是在您的特性方法中,您自己的语句都需要在后面出现。仅仅使用伪代码,如果没有MCVE,就很难再说什么了,因为我无法重现问题。有太多的空间来推测,所以请学习如何问好问题,从前一句中的链接开始。
https://stackoverflow.com/questions/65702384
复制相似问题