gpt4 book ai didi

java - 使用 Mockito 注入(inject) Autowiring 的 bean 并在模拟上设置一些属性

转载 作者:搜寻专家 更新时间:2023-11-01 04:04:03 32 4
gpt4 key购买 nike

给定以下 @Component 类:

@Component
public class MovieFinderImpl implements MovieFinder {

@Autowired
private Movie movie;

@Override
public List<Movie> findAll() {
List<Movie> movies = new ArrayList<>();
movies.add(movie);
return movies;
}

}

我正在尝试学习如何在不进行集成测试的情况下对该示例组件进行单元测试(因此没有 @RunWith(SpringRunner.class)@SpringBootTest 注释测试类)。

当我的测试类看起来像这样时:

public class MovieFinderImplTest {

@InjectMocks
private MovieFinderImpl movieFinderImpl;

@Mock
public Movie movieMock;

@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
movieMock.setTitle("test");
movieMock.setDirector("directorTest");
}

@Test
public void testFindAll() {
List<Movie> movies = movieFinderImpl.findAll();
Assert.assertNotNull(movies.get(0));

String expectedTitle = "test";
String actualTitle = movies.get(0).getTitle();
Assert.assertTrue(String.format("The expected name is %s, but the actual name is %s", expectedTitle, actualTitle), expectedTitle.equals(actualTitle));

String expectedDirector = "testDirector";
String actualDirector = movies.get(0).getDirector();
Assert.assertTrue(String.format("The expected name is %s, but the actual name is %s", expectedDirector, actualDirector), expectedDirector.equals(actualDirector));
}
}

... mock 不是 null,但是 mock 类变量是,因此:

java.lang.AssertionError: The expected name is test, but the actual name is null

我浏览了 http://www.vogella.com/tutorials/Mockito/article.html , 但无法找到如何在模拟上设置类变量的示例。

如何正确模拟电影对象?更一般地说,这是测试这个 MovieFinderImp 类的正确方法吗?我对组件测试的灵感来自这个博客 https://spring.io/blog/2016/04/15/testing-improvements-in-spring-boot-1-4

(ps:我想知道我是否应该在这个测试类中实际测试 movie.get() 方法......也许我的测试设计是错误的)。

最佳答案

您在 @Before 方法中模拟的方式存在问题。而不是

movieMock.setTitle("test");
movieMock.setDirector("directorTest");

那样做

Mockito.when(movieMock.getTitle()).thenReturn("test");
Mockito.when(movieMock.getDirector()).thenReturn("directorTest");

关于java - 使用 Mockito 注入(inject) Autowiring 的 bean 并在模拟上设置一些属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38972925/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com