栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Mockito,JUnit和Spring

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mockito,JUnit和Spring

老实说,我不确定我是否真的理解你的问题:PI将尽力从你最初的问题中得到的澄清:

首先,在大多数情况下,你对Spring不应有任何担心。编写单元测试时几乎不需要弹簧。在正常情况下,你只需要在单元测试中实例化被测系统(SUT,要测试的目标),并在测试中注入SUT的依赖项。依赖关系通常是模拟/存根。

你最初建议的方式以及示例2、3正是按照我在上文中的描述进行操作。

在极少数情况下(例如集成测试或某些特殊的单元测试),你需要创建一个Spring应用程序上下文,并从该应用程序上下文中获取SUT。在这种情况下,我相信你可以:

1)在spring app ctx中创建你的SUT,获取引用,然后向其注入模拟

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("test-app-ctx.xml")public class FooTest {    @Autowired    @InjectMocks    TestTarget sut;    @Mock    Foo mockFoo;    @Before        public void setup() {        MockitoAnnotations.initMocks(this);    }    @Test    public void someTest() {         // ....    }}

要么

2)按照链接“ Spring Integration Tests,创建模拟对象”中所述的方法进行操作。这种方法是在Spring的应用程序上下文中创建模拟,你可以从应用程序ctx获取模拟对象以进行存根/验证:

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("test-app-ctx.xml")public class FooTest {    @Autowired    TestTarget sut;    @Autowired    Foo mockFoo;    @Test    public void someTest() {         // ....    }}

两种方法都应该起作用。主要区别在于,前一种情况是在经历了Spring的生命周期等之后(例如bean初始化)注入了依赖项,而后一种情况是事先注入的。例如,如果你的SUT实现了spring的InitializingBean,并且初始化例程涉及到依赖项,你将看到这两种方法之间的区别。我相信这两种方法没有对与错,只要你知道自己在做什么。

只是一个补充,@ Mock,@ Inject,MocktoJunitRunner等在使用Mockito时都是不必要的。它们只是节省你键入Mockito.mock(Foo.class)和一堆setter调用的实用程序。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/432107.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号