【问题标题】:How to mock methods present inside the class that is being tested如何模拟正在测试的类中存在的方法
【发布时间】:2021-08-17 06:32:04
【问题描述】:

我对 Mockito 和 Java 软件测试完全陌生。 这是伪代码:

class serviceX()
{
   void seedCounter(Apple apple)
   {
    
    Seed seeds = apple.getSeeds(where seed colour is red)
    (if seeds is not null) print("found red seeds")
    else print("found nothing")
   }
   
}

getSeeds 是 Apple 类的一个类方法。现在我想测试seedCounter。我想测试一个场景,我假设(类似于 mockito.when(我发送一个带有红色种子的苹果)。thenReturn(notNull))我发送一个带有红色种子的苹果。我如何从中创建一个模拟场景?我想测试我是否将“找到的红色种子”作为输出。

【问题讨论】:

  • 为什么没有显示AppleSeed 的代码?

标签: java spring testing junit mockito


【解决方案1】:

我猜你想在你的服务方法中模拟传递的苹果,所以你可以定义你的 getSeeds 的返回值。 像这样的

Apple mockedApple = Mockito.mock(Apple.class); // retrieve a mocked instance of apple

// when mockedApple.getSeeds("where seed colour is red") is called, "Red seeds" will be returned
Mockito.when(mockedApple.getSeeds(Mockito.eq("where seed colour is red"))).thenReturn("Red seeds");

assertEquals("Red seeds", mockedApple.getSeeds("where seed colour is red"));
// serviceX.seedCounter(mockedApple);

另见https://stackoverflow.com/a/14970545/9479695

【讨论】:

  • 这实际上是在测试什么?基本上是assertThat(true)。 OP要测试的方法是seedCounter
  • 是的,断言只是为了证明它实际上是被模拟的。当然(如代码所示)他现在必须调用他的 seedCounter 方法来实际测试他的实现
【解决方案2】:

您可以按照此链接中的文档了解有关 mock with 模拟

https://www.baeldung.com/mockito-annotations

我尝试用你的伪代码向你展示:

@RunWith(MockitoJUnitRunner.class)
public class ServiceXTest {

    @Mock
    private Apple apple;

    @InjectMocks
    private ServiceX serviceX;

    @Test
    public void should_seed_cound() {
        // given
        Seed seed = new Seed();
        Mockito.when(apple.getSeeds()).thenReturn(seed);
        // when
        serviceX.seedCounter(apple);
        // do Stuff here
    }
}

@Mock 注释为您创建一个模拟对象。 别忘了给你的班级写@RunWith(MockitoJUnitRunner.class)

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
  • 好的,我用更多信息和代码示例编辑我的答案。谢谢
猜你喜欢
  • 2022-09-28
  • 2011-08-13
  • 2021-09-17
  • 2015-03-19
  • 2017-03-07
  • 1970-01-01
  • 2020-02-17
  • 2014-07-20
  • 2020-01-01
相关资源
最近更新 更多