是否有可能 return 模拟对象用于基于实际 class 中的局部变量的方法调用?

Is it possible to return a mock object for a method call based on a local variable in the actual class?

说我有这个 class:

public class RealClass {

    public static void method1(String accountID) {
        AccountObject accountObj = soapService.getAccountObject(accountID)
    }

}

我正在编写这样的模拟:

AccountObject accountObj = new AccountObject();
accountObj.setGoodAccount(false);
when(soapService.getAccountObject(anyString())).thenReturn(accountObj);

但是,我希望返回的 AccountObject 的“goodAccount”字段基于在 RealClass 中评估的 accountID。因此,例如,如果当前方法调用是 method1("abc123"),那么我想将 goodAccount 设置为 true。如果方法调用是 method1("def456"),那么我希望 goodAccount 为 false。

您可以使用两个帐户对象并指定帐户 ID 而不是 anyString()

AccountObject goodAccount = new AccountObject();
AccountObject badAccount = new AccountObject();

goodAccount.setGoodAccount(true);
badAccount.setGoodAccount(false);

when(soapService.getAccountObject("abc123")).thenReturn(goodAccount);
when(soapService.getAccountObject("def456")).thenReturn(badAccount);