저는 Clean Code: A Handbook of Agile Software Craftsmanship
을 읽고 있는데, 예제 중 하나는 Portfolio
클래스와 TokyoStockExchange
클래스입니다. 그러나 Portfolio
은 외부 API로 TokyoStockExchange
에 의존하여 포트폴리오의 가치를 결정하기 때문에 테스트 할 수 없으며 매우 휘발성 조회이며 테스트에 도움이되지 않습니다.단위 테스트 더미 객체를 유용하게 사용하는 이유에 대해 혼란스러워합니다.
그래서 공통된 StockExchange
인터페이스를 만들어이를 해결하고 TokyoStockExchange
및 DummyStockExchange
이 모두 기본 클래스를 구현합니다. 따라서 의존성 반전 원칙이 달성되고 PortfolioTest
클래스에서 DummyStockExchange
을 인스턴스화하고 주식을 회사에 고정하고 DummyStockExchange
인스턴스를 포트폴리오에 할당 한 다음 해당 회사의 일부 주식을 포트폴리오에 추가 한 다음 기대 가치는 실제로 적절한 가치입니다.
public class PortfolioTest
{
private DummyStockExchange exchange;
private Portfolio portfolio;
protected void setUp()
{
exchange = new DummyStockExchange();
exchange.fix("MSFT", 100);
portfolio = new Portfolio(exchange);
}
public void GivenFiveMSFTTotalShouldBe500()
{
portfolio.add(5, "MSFT");
Assert.assertEquals(500, portfolio.value());
}
}
내 질문은, 단순히 이유입니다 : 여기에 코드는?
클래스가 Portfolio
클래스와 함께 작동하는 경우 테스트를 시도했습니다. 우리가 주식 가격을 설정하고 그 포트폴리오의 포트폴리오 5 개를 제공하는 새로운 방법으로 또 다른 클래스를 생성한다면 모든 것이 효과적 일 것입니다. 그냥 쓸모없는 것 같습니다. 나는 TokyoStockExchange
이 기본적으로 주식 가격이 바뀌기 때문에 Portfolio
으로 테스트 할 수 없다는 것을 이해합니다. 그러나 오히려 쓸데없는 테스트에서의 서브빙이 상황을 어떻게 돕는 지 이해할 수 없습니다.
우리의 가산기 프로그램이 작동하는지 알지 못하는 것 같지만 무작위로 생성 된 숫자 만 있으므로 더미 클래스를 만들어서 2를주고 2 + 2 = 4
을 테스트 해 봅니다. 그래, 분명히 사실이야. 우리는 여전히 TokyoStockExchange
을 깨고 다른 클래스를 테스트하기 때문에 테스트를 계속할 수 있습니다. 이 모든 것이기만적인 것처럼 보이면 우리가 알고있는 것을 테스트하기 위해 추가 코드를 작성해야합니다.
이 부분에서 단위 테스트를 이해하는 데있어 가장 큰 문제라고 생각합니다. 나는 내가 틀렸던 것을 안다. 나는 단지 내가 추측하는 빛을 보지 못했다. 잘만되면 누군가 나를 도울 수 있습니다.
참고로,'TokyoStockExchange'가 *'Portfolio'와 함께 작동하는지 테스트 중이라면, 당신은 단위 테스트의 범위 밖에 있습니다. 'Portfolio'와'TokyoStockExchange '는 단위이며, 단위 테스트는 가능한 한 많은 다른 것들 (바람직하게는 모두)과 개별적으로 * 단위 *를 테스트하기위한 것입니다. 그들 사이의 상호 작용은 * 통합 테스트 *에서 다루고 있습니다. – cHao
+1은 "코드를 유지 관리하는 데 더 많은 노력이 필요합니다"라는 단위 테스트를 사용하는 대신 값을 이해하기 위해 +1을 사용합니다. –
[programmers.se]에 대한 질문이 더 많습니다. –