mockito - 如何为不同的参数嘲笑不同的行为
问题描述:
我想要一个简单的模拟,当用给定的参数调用时表现一种方式,而另一种情况下调用其他所有方式。mockito - 如何为不同的参数嘲笑不同的行为
我试过这个变化:
when(this.mockWebElement.findElement(not(eq(By.xpath("./td[1]"))))).thenReturn(this.mockWebElement);
when(this.mockWebElement.getText()).thenReturn("someString");
when(this.mockWebElement.findElement(By.xpath("./td[1]"))).thenReturn(dateMockElement);
when(dateMockElement.getText()).thenReturn("8/1/2014", "7/1/2014", "6/1/2014", "5/1/2014");
至getText(By.xpath("./td[1]"))
调用总是返回"someString"
。我也试过and(eq(any(By.class)), not(eq(By.xpath("./td[1]")))
。
答
您可以使用anyString()方法如下
Mockito.when(mockedObject.someMethod(Mockito.anyString())).thenReturn(object1);
Mockito.when(mockedObject.someMethod(Mockito.eq("anotherString"))).thenReturn(object2);
答
给出使用你的代码为基础,下面的测试通过对我来说:
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
@Mock private WebElement mockWebElement;
@Mock private WebElement dateMockElement;
@Test
public void testX() throws Exception {
when(this.mockWebElement.findElement(not(eq(By.xpath("./td[1]"))))).thenReturn(this.mockWebElement);
when(this.mockWebElement.getText()).thenReturn("someString");
when(this.mockWebElement.findElement(By.xpath("./td[1]"))).thenReturn(dateMockElement);
when(dateMockElement.getText()).thenReturn("8/1/2014", "7/1/2014", "6/1/2014", "5/1/2014");
WebElement w = mockWebElement.findElement(By.xpath("./td[1]"));
String x= w.getText();
assertEquals("8/1/2014", x);
}
既然你还没有表现出休息的测试,我假设这个错误是在你的实际测试设置和执行的其他部分。
+0
我无法重现我遇到的问题,所以我认为你是对的。感谢您的备份。 – jordanpg 2014-12-05 21:19:07
你的“not()”方法来自哪里?这并不出现在我熟悉的作为有效匹配器的任何版本的Mockito中。 – 2014-12-05 19:56:11
http://mockito.github.io/mockito/docs/current/org/mockito/AdditionalMatchers.html – jordanpg 2014-12-05 19:57:25