【问题标题】:How can performed method setUp only once in tests如何在测试中只执行一次方法设置
【发布时间】:2015-06-02 15:09:20
【问题描述】:

我有测试:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestRepositoryConfig.class})
@Transactional
public class ServiceTest {

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private Service service;

static {
   initTestUser();
}

public void setUp() { 
   userRepository.seve(testUser);
}

public void test1() { ... }

public void test2() { ... }

我需要先启动方法setUp,保存testUser,然后启动方法test1和test2。方法 setUp 只能执行一次!怎么办?

【问题讨论】:

  • 那个静态块在 setUp 方法中会更好看。

标签: java testing junit integration-testing


【解决方案1】:

我相信您尝试解决的问题应该以不同的方式完成。据我所知,您想用一些测试数据填充您的数据库,最好在所有测试的全局配置中这样做。

但如果您想坚持最初的想法,您可以尝试使用this blog post 中描述的侦听器方法。

【讨论】:

    【解决方案2】:

    使用@BeforeClass注解

    public class MyTest {
         @BeforeClass public static void setupClass() { /* Set up stuff once */ }
         @Test public void test1() { /* ... */ }
    
    }
    

    但是请注意,静态方法无法访问实例成员,并且您要在测试运行之前设置的内容必须是静态的。建议事后使用@AfterClass进行清理

    【讨论】:

    • 不,我需要初始化我的本地参数(@Autowired private UserRepository userRepository)
    • 然后使用@Before。您的要求:“方法设置必须只执行一次!”用这个解决方案来实现。
    猜你喜欢
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    相关资源
    最近更新 更多