创建DRY Junit测试对象

dhxwm5r4  于 2022-11-11  发布在  其他
关注(0)|答案(2)|浏览(146)

我正在创建几个单元测试来测试我的应用程序逻辑。在下面,我创建了两个基于order是否为真的final变量。有没有一种方法可以让它变干,而不必为每一种order类型都创建final变量?

private static final Order FIRST_ORDER = createOrder(
     "watch",
      "123",
      true
  );

  private static final Order SECOND_ORDER  = createOrder(
     "watch",
      "123",
      false
  );

  private static Order createOrder(String productName, String productId, Boolean isNewOrder){
  //Logic
  }

  @Test
  public void shouldTestOrderCreation(){
      OrderHelper helper = new OrderHelper();
      helper.createOrder(FIRST_ORDER);
  }

  @Test
  public void shouldTestOrderCreation(){
      OrderHelper helper = new OrderHelper();
      helper.createOrder(SECOND_ORDER);
  }
uqcuzwp8

uqcuzwp81#

这有什么不对吗?

@Test
  public void testNewOrder(){
      createOrder(true);
  }

  @Test
  public void testNotNewOrder(){
      createOrder(false);
  }

  void createOrder(boolean newOrder) {
      OrderHelper helper = new OrderHelper();
      helper.createOrder("watch", "123", newOrder);
  }

您也可以参数化测试:

@ParameterizedTest
@ValueSource(booleans={true, false})
void createOrder(boolean newOrder) {
  OrderHelper helper = new OrderHelper();
  helper.createOrder("watch", "123", newOrder);
}

但这完全取决于你想测试什么样的Assert。

zf9nrax1

zf9nrax12#

用函数调用代替常量更好;它们与单个单元测试方法具有相同的生命周期/时间。一个数据构造函数还不错。* 我认为这是一个人在常量上感受到的最具风格的刺激。*
这甚至适用于引用其他数据的复杂数据。我甚至可能会争辩说,将数据放在本地更容易阅读。
在这两种情况下,DRY可能意味着不复制可能不相关的具有相同值的属性,如产品名称。

相关问题