3

在 JUnit 中,一些测试与 @RunWith(Theories.class) 注释一起使用,我不知道我们何时以及为什么使用它?

4

2 回答 2

4

当您希望您的测试专注于输入和输出之间的广义关系时,您应该使用它们。请参阅:https ://blogs.oracle.com/jacobc/entry/junit_theories 。

于 2012-10-16T10:27:10.793 回答
0

我认为捕获多种类型的输入是一回事。高层次的想法是,您想测试您的方法是否适用于所有可能的输入。

例如,假设我有一个复杂的业务流程,需要 5 个不同的输入,假设每个输入有 10 种可能的状态,所以我们最终得到 10*10*10*10*10 = 100,000 种可能的输入状态,这意味着我们需要事先知道这 100,000 个输出值是什么。

但是,您可能意识到您实际上不需要枚举所有 100,000 个状态。可能有一个您感兴趣的子集。让我们理论化例如:

“管理员没有权限限制”。如果我想断言这是真的,我的测试最终看起来像下面的伪代码。

@Test
public void AdminsHaveNoPermissionRestriction(User user, BusinessProcess bp, Input a, Input b ...) {
   Assume.assumeThat("User is an admin", user.hasRole(admin);

   // .. rest of test which uses bp, a, b etc...
)

好消息是我们跳过了不感兴趣的对象(非管理员),因为它不符合假设。

于 2014-04-03T21:40:20.607 回答