gpt4 book ai didi

java - 用其他方法模拟一个方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:09:35 25 4
gpt4 key购买 nike

我有以下要测试的方法:

public boolean sendMessage(Agent destinationAgent, String message, Supervisor s, MessagingSystem msgsys, String time) throws ParseException {
if(mailbox.getMessages().size() > 25){
return false;
}else{
if(login(s, msgsys, time)){
try {
sentMessage = msgsys.sendMessage(sessionkey, this, destinationAgent, message);
if(sentMessage.equals("OK")) {
return true;
}
return false;
} catch (ParseException e) {
e.printStackTrace();
return false;
}
}
return false;
}
}

我想模拟方法 login(s, msgsys, time)。我这样做如下:

@Mock
private Supervisor supervisor;
@Mock
private MessagingSystem msgsys;

@Test
public void testSendMessageSuccess() throws ParseException {
String message = "Hey";
Agent destination = new Agent("Alex", "2");
agent.sessionkey = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";

when(agent.login(supervisor, msgsys, anyString())).thenReturn(true);
when(msgsys.sendMessage(agent.sessionkey, destination, agent, message)).thenReturn("OK");

boolean result = agent.sendMessage(destination, message, supervisor, msgsys, time);

assertEquals(true, result);
}

但是遇到如下错误:

org.mockito.exceptions.misusing.WrongTypeOfReturnValue: 
Boolean cannot be returned by getLoginKey()
getLoginKey() should return String

请注意方法 getLoginKey() - 返回一个字符串,在方法 login(s, msgsys, time) 中被调用,它属于一个接口(interface)类。

@Before
public void setup(){
MockitoAnnotations.initMocks(this);
agent = new Agent("David", "1");
time = dateFormat.format(new Date());
}

@After
public void teardown(){
agent = null;
}

最佳答案

如果您想模拟 Agent 的其中一种方法(在您的情况下为 login()),那么您尝试 stub 的 Agent 需要是模拟或 spy 。

因为在你的情况下 login() 是你想要模拟的唯一方法,而 Agent 类的其余功能完好无损,那么你应该监视这个对象:

@Before
public void setup(){
MockitoAnnotations.initMocks(this);
agent = Mockito.spy(new Agent("David", "1"));
time = dateFormat.format(new Date());
}

请注意,将 spy stub 时,您需要使用以下语法:

doReturn(true).when(agent).login(supervisor, msgsys, anyString());

关于java - 用其他方法模拟一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47678920/

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