Я новичок в Юнит, Мокито и Спринг. Я пытаюсь понять, когда использовать Spring при модульном тестировании. Я могу тестировать приведенный ниже код без использования Spring. Я прочитал много статей о том, что одним из преимуществ Spring является модульное тестирование. Я запутался, поскольку смог успешно протестировать свой код с использованием JUnit и Mockito, тогда где и зачем использовать Spring?
Класс Product
public class Product {
}
Интерфейс ProductDao
public interface ProductDao {
int getAvailableProducts(Product product);
int orderProduct(Product product, int orderedQuantity);
}
Класс ProductServiceTest
public class ProductService {
private ProductDao productDao;
public void setProductDao(ProductDao productDao) {
this.productDao = productDao;
}
public boolean buy(Product product, int orderedQuantity) throws InsufficientProductsException {
boolean transactionStatus = false;
int availableQuantity = productDao.getAvailableProducts(product);
if (orderedQuantity > availableQuantity) {
throw new InsufficientProductsException();
}
productDao.orderProduct(product, orderedQuantity);
transactionStatus = true;
return transactionStatus;
}
}
Класс ProductServiceTest
import org.junit.Before;
import org.junit.Test;
import org.mockito.InOrder;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class ProductServiceTest {
private ProductService productService;
private ProductDao productDao;
private Product product;
private int purchaseQuantity = 15;
@Before
public void setupMock() {
productService = new ProductService();
product = mock(Product.class);
productDao = mock(ProductDao.class);
productService.setProductDao(productDao);
}
@Test
public void testBuy() throws InsufficientProductsException {
int availableQuantity = 30;
System.out.println("Stubbing getAvailableProducts(product) to return " + availableQuantity);
when(productDao.getAvailableProducts(product)).thenReturn(availableQuantity);
System.out.println("Calling ProductService.buy(product," + purchaseQuantity + ")");
productService.buy(product, purchaseQuantity);
System.out.println("Verifying ProductDao(product, " + purchaseQuantity + ") is called");
verify(productDao).orderProduct(product, purchaseQuantity);
System.out.println("Verifying getAvailableProducts(product) is called at least once");
verify(productDao, atLeastOnce()).getAvailableProducts(product);
System.out.println("Verifying order of method calls on ProductDao: First call getAvailableProducts() followed by orderProduct()");
InOrder order = inOrder(productDao);
order.verify(productDao).getAvailableProducts(product);
order.verify(productDao).orderProduct(product, purchaseQuantity);
}
}
Разница между JUnit и Mockito?
Если мы все высмеиваем (например, все, что есть внутри метода покупки в ProductService
), мы действительно являемся модульным тестированием. Макет все, настроить все, как он должен вести себя. Тогда какой смысл тестировать юнит?