gpt4 book ai didi

java - JUnit 中用于 ShoppingCart 的无序执行测试

转载 作者:行者123 更新时间:2023-11-29 05:13:33 26 4
gpt4 key购买 nike

我正在学习 TDD 实践并编写单元测试。在尝试为购物车应用程序创建测试时,我预计我的测试会无序执行。

这是我的测试列表:

测试 1:可以创建一个空的购物车

测试 2:可以将产品添加到购物车

测试三:可以计算出购物车的总价

我假设测试执行的顺序必须是

测试1

测试2

测试3

但我的代码中实际的测试执行顺序是

测试1

测试3

测试2

我发现为我们的单元测试指定执行顺序是一种不好的做法,我想避免这种做法。这种行为的原因可能是什么,解决方案是什么?

这是我的代码:

package com.techie.kart;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import java.math.BigDecimal;
import org.junit.Before;
import org.junit.Test;

import com.techie.kart.model.Product;

public class ShoppingKartTest {

private ShoppingCart cart;
private Product appleProduct;
private Product sonyProduct;

@Before
public void setup() {
cart = new ShoppingCart();
appleProduct = new Product.ProductBuilder().name("Mobile")
.price(new BigDecimal(10000.25)).description("This is IPhone")
.manufacturer("Apple").build();
sonyProduct = new Product.ProductBuilder().name("Mobile")
.price(new BigDecimal(50000.00)).description("This is Sony")
.manufacturer("Sony").build();

}

@Test
public void CanCreateAnEmptyShoppingCart() {
System.out.println("First Test Case:"+cart.getProductsCount());
assertEquals(0, cart.getProductsCount());
}

@Test
public void CanAddProductsToKart() {
cart.addProduct(appleProduct);
cart.addProduct(sonyProduct);
assertNotEquals(0, cart.getProductsCount());
System.out.println("Second Test Case:"+cart.getProductsCount());
assertEquals(2, cart.getProductsCount());
assertEquals(new BigDecimal(60000.25), cart.getTotal());
System.out.println("Second Test Case:"+cart.getTotal());
}

@Test
public void CanCalculateTotalCartPrice() {
System.out.println("Third Test Case:"+cart.getTotal());
System.out.println("Third Test Case:"+cart.getProductsCount());
assertEquals(new BigDecimal(60000.25), cart.getTotal());
}
}

实际输出:

First Test Case:0
Third Test Case:0
Third Test Case:0
Second Test Case:2
Second Test Case:60000.25

预期输出(我的假设):

First Test Case:0
Second Test Case:2
Second Test Case:60000.25
Third Test Case:2
Third Test Case:60000.25

最佳答案

对于每个单独的测试用例,您唯一可以期望执行的是“@Before”标记的方法中的任何内容。因此,对于第三种方法的范围,购物车刚刚初始化,没有添加任何产品。您需要在该方法中再次添加产品,无论它们是否已添加到任何其他测试用例中。在编写单个测试用例时,将它们视为不存在其他测试用例。

关于java - JUnit 中用于 ShoppingCart 的无序执行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27446136/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com