gpt4 book ai didi

java - JUnit:如何检查一个方法是否调用了另一个方法?

转载 作者:行者123 更新时间:2023-12-04 04:47:19 24 4
gpt4 key购买 nike

我想检查另一个方法中的一个方法是否被调用(如果另一个方法返回 false!)

这听起来有点复杂,但如果我提供我的代码,它应该更容易理解。

有谁知道这是否可能?

我想检查以下方法是否在 usermanagement.storeUser(user1) 返回 false 时调用 RegisterGUI.errorDuplicateUsername() 。

public class RegisterController {

public void regHandle(UserDataObject user1){

ValidateRegisterInputController validate = new ValidateRegisterInputController();
validate.validateInputHandle(user1);

OracleUserManagement usermanagement = OracleUserManagement.getInstance();
if (usermanagement.storeUser(user1) == false) {
RegisterGUI.errorUsernameDuplicate(); }

}
}

这是我迄今为止所拥有的:
/** Step1. Mock UserDataObject and stub OracleUserManagement.storeUser(UserDataObject) to return false.
* Step2. Check if RegisterController.regHandle(MockedUserDataObject) calls RegisterGUI.errorDuplicateUsername
* Step3. See if Test passes!
*/

@Test
public void testRegisterControllerregHandleCallsLoginGUIerrorDuplicateUsernameWhenOracleUserManagementstoreUserReturnsFalse(){
UserDataObject user1mocked = mock(UserDataObject.class);
OracleUserManagement usermanagementmocked = mock(OracleUserManagement.class);

when(usermanagementmocked.storeUser(user1mocked)).thenReturn(false);

/** This is where I'm a bit confused. How can I test that when I run this
* method, it will call RegisterGUI.errorDuplicateUsername()?
*/
RegisterController regcontroller = new RegisterController();
regcontroller.regHandle(user1mocked);

verify(RegisterGUI.errorUsernameDuplicate())


}
}

但是,它说我不能使用验证方法

最佳答案

我假设 RegisterGUI 是一个类名,因此该方法是静态的。显然在 Java 中不可能覆盖静态方法,所以你不能用 mockito 来做到这一点。我会推荐重构代码,不要使用静态方法。

但是,如果您正在处理遗留代码,则可以使用 Powermock 来操作字节码并覆盖静态。

处理遗留代码的另一种方法是将静态方法调用提取到新方法中。所以你的 Controller 将是:

public class RegisterController {

public void regHandle(UserDataObject user1){

ValidateRegisterInputController validate = new ValidateRegisterInputController();
validate.validateInputHandle(user1);

OracleUserManagement usermanagement = OracleUserManagement.getInstance();
if (usermanagement.storeUser(user1) == false) {
errorUsernameDuplicate(); }

}

void errorUsernameDuplicate() {
RegisterGUI.errorUsernameDuplicate();
}
}

现在您可以使用 mockito spy 来验证您的 Controller :
verify(regcontroller).errorUsernameDuplicate()

显然,该方法本身变得未经测试,但它是微不足道的,不是问题。

关于java - JUnit:如何检查一个方法是否调用了另一个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17992887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com