在Spring中,在对象上运行一堆测试方法的最佳方法是什么,但在每次新的测试方法调用之前重置/重新注入对象? 我试着在下面的代码中做,但是使用我当前的逻辑,对象被创建并只注入一次..
package com.bidtracker;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.is;
import com.bidtracker.iface.BidTracker;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class BidTrackerTest {
@Autowired
BidTracker tracker;
@Test
public void shouldReturnHighestBidAmount1(){
tracker.bidOnItem("itemB", "user1", 105);
assertThat(tracker.getHighestBid("itemB").getAmount(),is(Integer.valueOf(105)));
}
@Test
public void shouldReturnHighestBidAmount2(){
tracker.bidOnItem("itemB", "user1", 39);
tracker.bidOnItem("itemB", "user1", 50);
assertThat(tracker.getHighestBid("itemB").getAmount(),is(Integer.valueOf(50)));
}
}
答案 0 :(得分:1)
JUnit具有@Before
注释,您可以在每次测试之前使用它进行任何初始化。
但是,我很好奇你的情况。这是来自@Test
文档:
Test annotation告诉JUnit公共void方法到哪个 附加可以作为测试用例运行。要运行该方法,请使用JUnit 首先构造一个新的类实例然后调用 注释方法。将报告测试引发的任何异常 由JUnit作为失败。如果没有抛出异常,那么测试就是 假设已经成功。
我猜测问题是bean是单例。它实际上再次注入,但如果它被修改,你使用相同的东西。您可以尝试@DirtiesContext注释。
答案 1 :(得分:1)
这里的问题是默认情况下Spring测试支持会缓存应用程序上下文,如果键的元素匹配(上下文名称,活动配置文件等),它将重用缓存的上下文。要让Spring从缓存中删除上下文,您可以使用@DirtiesContext
注释标记测试(在方法级别或测试类级别)。