我希望一个简单的模拟在使用给定参数调用时表现为一种方式,而在使用其他所有内容调用时则另一种方式。
我尝试过这方面的变种:
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]")))
。
答案 0 :(得分:2)
使用您的代码作为基础,以下测试通过我:
@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);
}
由于您没有显示测试的其余部分,我假设错误是在实际测试设置和执行的其余部分中。
答案 1 :(得分:0)
您可以使用下面给出的anyString()方法
Mockito.when(mockedObject.someMethod(Mockito.anyString())).thenReturn(object1);
Mockito.when(mockedObject.someMethod(Mockito.eq("anotherString"))).thenReturn(object2);