저는 OO 설계 문제로 작업하고 있습니다. 나는 혼란스러워하는 부분에 초점을 맞추고 코드를 제공하기보다는 텍스트로 설명하려고 노력할 것이다.클래스에 매개 변수로 전달 된 연결에 대한 테스트 가능성에 미치는 영향은 무엇입니까?
TaxPolicy 목록이 포함 된 SalesPolicy 클래스가 있습니다. TaxPolicy는 이름과 세율을 속성으로 갖는 세금 정책을 나타내는 추상 클래스입니다. TaxPolicy에는 accept라는 추상 메서드가 포함되어 있습니다. TaxPolicy의 구체적인 구현은 accept 메소드를 구현하고 TaxPolicy가 적용 가능한시기를 결정하는 논리를 제공해야합니다.
SalesEngine이라는 또 다른 클래스가 있습니다. SalesEngine에는 SalesPolicy가 있으며 SalesPolicy는 SalesEngine 생성자에 대한 매개 변수 중 하나입니다. SalesEngine은 SalesPolicy의 TaxPolicy 목록에있는 TaxPolicy가 accept 메소드를 호출하여 항목에 적용 가능한지 여부를 결정한 다음 그에 따라 세금을 계산합니다. 이전에 설명했듯이 SalesPolicy에는 TaxPolicy의 목록 인 단일 속성과 목록에 추가 할 메소드가 들어 있습니다.
내가 알아야 할 것은 SalesEngine 클래스의 SalesPolicy와 같은 매개 변수가 있는지 여부입니다. 이것이 테스트 가능한 코드의 관점에서 어떤 영향을 미칩니 까? SalesEngine
가 사용자 또는 누구든지 이미 그들이 사용하고자하는 그 무엇 SalesPolicy
알고를 작성되는
public SalesEngine(SalesPolicy policy) { ... }
:
텍스트를 코드로 번역 해 주셔서 감사합니다. 테스트 가능성에 미치는 영향은? SalesEngine 클래스를 테스트하는 테스트 케이스는 SalesPolicy를 먼저 생성해야합니다. 이것은 간접적으로 테스트 사례가 SalesPolicy에 추가 할 최소한 하나의 TaxPolicy를 만들어야 함을 의미합니다. – CKing
당신이 위에서 설명한 것은 두 개의 개별 테스트 케이스라고 생각합니다. 하나의 SalesPolicy가 생성되지 않은 경우,'accept()'메소드는 아무 것도하지 않고, 또 다른 하나는'SalesEngine' 전에'SalesPolicy'를 생성해야하는 곳입니다. 이 둘은 완벽하게 정상적으로 들립니다. JUnit에서'@ Before' 태그를 사용하면 테스트를 위해 시나리오를 초기화 할 수 있습니다. –
SalesEngine에 accept 메서드가 없습니다. SalesEngine은 SalesPolicy가 보유한 목록의 TaxPolicy 개체를 반복합니다.그런 다음 구매 된 각 항목을 각 TaxPolicy의 accept 메소드로 전달하고 TaxPolicy를 기반으로 항목에 대한 세금을 계산합니다. 우리는 본질적으로 정책 - 만약 각 정책 -> 정책 적용 -> 세금 계산 –
CKing