当前位置: 首页 > 知识库问答 >
问题:

嘲弄方法的值

曾喜
2023-03-14

正在测试的类:

class FruitQuality {

  void testQuality() {
    getfruits();
    //some code
  }

  List<Fruits> getfruits() {
    return orange;
  }
}

下面是测试代码。我模拟了测试中的类class,并覆盖了方法getFruits的返回值。但是当我运行mock时,我没有得到预期的mock返回值。Easymock可以将返回值替换为被测试类的方法,如果这些方法是显式模拟的。当我模拟真实的对象方法时,如何获得模拟的返回值。

@Test
public void test() {
  Fruits fruit= new Fruits();
  fruit.setFruit("orange");
  List<Fruits> fruitsList = new ArrayList<Fruits>();
  fruitsList.add(fruit);

  Fruits mock = Mockito.mock(FruitQuality.class)
  classUnderTest = new FruitQuality();
  when(mock.getfruits()).thenReturn(fruitsList);

  result= classUnderTest.getfruits();
  assertEquals(result, fruitsList);
}

共有1个答案

程景胜
2023-03-14

通常,在编写单元测试时,您有一个被测试类包含您正在测试的实现代码,同时嘲弄您的被测试类所依赖的其他类的方法。

参考您的示例,您将有一个类

public class FruitQuality {
    private FruitProvider fruitProvider;

    public List<Fruit> testQuality() {
        List<Fruit> fruits = fruitProvider.getfruits();
        /* Some code doing something with fruits, e.g., filtering. */
        return fruits;
    }
}

还有第二等

public class FruitProvider {
    public List<Fruits> getfruits() {
        /* Returning some fruits ... */
    }
}
@RunWith(MockitoJUnitRunner.class)
public class FruitQualityUnitTest {
    @InjectMocks
    private FruitQuality fruitQuality;
    @Mock
    private FruitProvider fruitProvider;

    @Test
    public void testQuality() {
        /* Mocking the provider. */
        Fruits fruit= new Fruits();
        fruit.setFruit("orange");
        List<Fruits> fruitsList = new ArrayList<Fruits>();
        fruitsList.add(fruit);
        when(fruitProvider.getFruits()).thenReturn(fruitsList);

        /* Invoke the method under test. */
        List<Fruits> result = fruitProvider.testQuality();

        /* Assert that some methods where called. */
        verify(fruitProvider, times(1)).getFruits();

        /* If the method would return a value, you can do some assertions based on the mocked method calls. */
        assertEquals(result, fruitsList);
    }
}

如果您想测试您正在嘲弄的同一对象的方法,您可以使用@spy注释而不是@mock,以确保只有您正在明确嘲弄的方法做了原始实现之外的其他事情。

 类似资料:
  • 在helper类的静态方法中调用时,它会抛出一个NPE。我所做的是嘲笑MarkupMaker和它的返回值(一个Markup实例)。最后,我希望调用标记实例的。无论我做什么-的调用都是抛出一个NPE。我找不到任何文档告诉我如何在spock中详细模拟方法调用值。 编辑:我添加了示例。的调用返回null,即使我在spock测试中对其进行了嘲弄。 test.groovy java(执行模拟对象的方法) j

  • 我正在为类编写一个单元测试,该类如下所示: 我想编写一个简单的单元测试,它将方法存根(这样它就不会实际触发并命中数据库),但它允许我验证调用是否最终执行。Mockito似乎是这份工作的合适工具。 这似乎是一个很好的游戏计划(至少对我来说)。但当我实际编写代码时,在测试方法的第2行(行)出现以下编译器错误: 类型Mockito中的(T)不适用于参数(void)时的方法 我看到Mockito无法模拟返

  • 我遇到了一个挑战,当我单独运行测试时,测试通过了,但当我运行所有测试时,测试失败了,它会显示以下错误消息: java.lang.RuntimeException:Android.os.Looper中的方法getMainLooper未被嘲弄。详见http://g.co/androidstudio/not-mocked。 在Android.os.looper.GetMainLooper(looper.

  • 任何帮助都将得到高度赞赏。 提前致谢

  • 是否可以用Spock模拟java中的静态方法?我知道模拟静态groovy方法是可能的,但无法使其适用于Java方法。

  • 最近,我看到一篇博文说,“出于文档的目的,我们在服务层使用mocking(在使用spring rest doc的环境中)”,所以这篇博文使用了类似spring的@MockBean到服务层对象的注释。 但我认为,如果我模仿服务层- 所以我觉得这是不对的但是, 我想知道什么更好,或者如何将service object与spring rest文档一起使用 恳求回答