@ExtendWith(MockitoExtension.class)
// @PrepareForTest(UserContext.class)
public class KonfigurationCopyServiceTest {
public static final String CONFIGURATION_NAME = "Standard-Konfiguration";
@Mock
public TriggeringKonfigurationService triggeringKonfigurationService;
@Mock
public ReportKonfigService reportConfigurationService;
@Mock
public BuchungsschemaService buchungsschemaService;
public KonfigurationCopyService copyService;
@BeforeEach
public void init() {
Mockito.mockStatic(UserContext.class);
Mockito.when(UserContext.getUsername()).thenReturn("superuser");
copyService = new KonfigurationCopyService(triggeringKonfigurationService,
reportConfigurationService, buchungsschemaService);
}
谢谢你!
编辑:UserContext.java
package de.msggillardon.system;
/**
* This class contains the username and IP-address of the logged in user. It is initialized for each
* session.
*
* @author wildp
*/
public class UserContext {
private static final ThreadLocal<UserContext> userContext = new ThreadLocal<>();
private final String username;
private final String clientIPAddress;
/**
* Constructor.
*
* @param username Username of the user who is logged in
* @param clientIPAddress IP Address of the user who is logged in
*/
public UserContext(String username, String clientIPAddress) {
this.username = username;
this.clientIPAddress = clientIPAddress;
}
/**
* Initializes the threadLocal
*
* @param userContext
*/
public static void initialize(UserContext userContext) {
UserContext.userContext.set(userContext);
}
/**
* Removes the current thread's value for this thread-local variable.
*/
public static void remove() {
userContext.remove();
}
/**
* Returns the username of the current thread.
*
* @return
*/
public static String getUsername() {
return userContext.get().username;
}
/**
* Returns the IP address of the client of the current thread.
*
* @return
*/
public static String getClientIPAddress() {
return userContext.get().clientIPAddress;
}
public static UserContext getThreadLocalUserContext(){
return userContext.get();
}
}
新编辑:我再次编辑了我的代码,所以您现在可以看到,我正在使用@ExtendWith(mockitoExtension.lass)来模拟。
因此,当我使用JUnit5时,我不能使用@before注释,所以我用@beforeall替换了@beforeach。所以我是这样做的:
import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS;
步骤:添加@TestInstance(PER_CLASS)注释(在类之前)
当我尝试运行代码时,它会导致我遇到一个异常。 LoginController.java sampleClass.java MissingMethodInvocationException:when()需要一个必须是“mock上的方法调用”的参数。例如:when(mock.getarticles()).ThenReturn(articles); 此外,出现此错误的原因可能是:1。您使用final/p
我正在用它来实现一个模拟来调用我的抽象类。 但我的问题是,我的抽象类有太多的依赖关系是自动连接的。子类是。如果它不是一个抽象类,我会使用@InjectMocks来注入这些模拟依赖项。而是如何将mock添加到我上面给出的实例中。 在此处简化代码版本/ 我的Junit是
1. Mockito Mockito 有着比EasyMock更优雅的API。 官方最完整的文档。 与EasyMock比,它分开了设定返回值的stub语句与验证mock被调用过的verify函数,两者不再连在一起,不再需要那种记录,然后replay()的语句,而是需要分别独立编写。 使用示例见quickstart中的AccoutServiceTest. 当然,Mockito的基本原理还是用cglib
不幸的是: TweetServiceTest.java Hibernateutil.java
我尝试运行此测试: 但是我得到了NullPointer异常: Mockito.when 我错过了什么?
我正在编写一个类的单元测试,但我得到了一个错误 when()需要一个参数,该参数必须是模拟上的方法调用 错误: