Я изучаю методы TDD и записываю тесты единиц. Хотя при попытке создать тесты для приложения для покупок я ожидал неупорядоченное выполнение моих тестов.Неупорядоченное выполнение тестов в JUnit для ShoppingCart
Вот мой список тестов:
Тест 1: Можно создать Корзина, которая Empty
Тест 2: Можно добавить продукт в корзину
Тест 3: Можно рассчитать Общая стоимость в корзину
Я предполагаю, что порядок выполнения теста должен быть
Test1
Test2
Test3
Но фактическое Порядок испытания исполнения в моем коде
Test1
Test3
Test2
я узнал, что это плохая практика, чтобы указать порядок выполнения наших модульных тестов, которые я хочу t o избегать. Что может быть причиной такого поведения и каково решение?
Вот мой код:
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
Спасибо за ответ. Есть ли какой-либо конкретный порядок, в котором тесты выполняются в JUnit? Почему тесты не выполняются последовательно, как T1, T2 T3, но выполняются как T1, T3, T2? Выполняет ли JUnit произвольный порядок выполнения тестов? –
Я не уверен, как это упорядочено, однако порядок не имеет значения, потому что все, что было изменено в рамках отдельного модульного теста, не сохраняется за пределами этого метода. – Kevin
Спасибо за быстрый ответ :) +1 –