【问题标题】:mockito - how to mock different behaviors for different argumentsmockito - 如何为不同的论点模拟不同的行为
【发布时间】:2014-12-05 19:17:11
【问题描述】:

我希望一个简单的模拟在使用给定参数调用时以一种方式运行,而在使用其他所有参数调用时以另一种方式运行。

我已经尝试过这方面的变化:

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]")))

【问题讨论】:

标签: java unit-testing mocking mockito


【解决方案1】:

以您的代码为基础,我通过了以下测试:

@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);
    }

由于您没有展示测试的其余部分,我假设错误出在实际测试设置和执行的其余部分。

【讨论】:

  • 我无法重现我遇到的问题,所以我认为您是对的。感谢您的备份。
【解决方案2】:

您可以使用下面给出的 anyString() 方法

 Mockito.when(mockedObject.someMethod(Mockito.anyString())).thenReturn(object1);
 Mockito.when(mockedObject.someMethod(Mockito.eq("anotherString"))).thenReturn(object2);

【讨论】:

  • 我在 Mockito API 中没有看到 getInnerObject 方法。
  • 哦,这只是我的例子,对你来说是 findElement()
  • 这是我的第一个想法,但这对我不起作用。也许是因为我的论点调用了另一个静态方法?
猜你喜欢
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 2016-07-21
  • 2020-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多