Для Java Spring тестирования людей в Спока:
constructorArgs это путь, но использовать инъекции конструктор. Spy() не позволит вам автоматически устанавливать поля автоматически.
// **Java Spring**
class A {
private ARepository aRepository;
@Autowire
public A(aRepository aRepository){
this.aRepository = aRepository;
}
public String getOne(String id) {
tryStubMe(id) // STUBBED. WILL RETURN "XXX"
...
}
public String tryStubMe(String id) {
return aRepository.findOne(id)
}
public void tryStubVoid(String id) {
aRepository.findOne(id)
}
}
// **Groovy Spock**
class ATest extends Specification {
def 'lets stub that sucker' {
setup:
ARepository aRepository = Mock()
A a = Spy(A, constructorArgs: [aRepository])
when:
a.getOne()
then:
// Stub tryStubMe() on a spy
// Make it return "XXX"
// Verify it was called once
1 * a.tryStubMe("1") >> "XXX"
}
}
Спок - гася недействительным метод на Spy очень приемлю
// **Groovy Spock**
class ATest extends Specification {
def 'lets stub that sucker' {
setup:
ARepository aRepository = Mock()
A a = Spy(A, constructorArgs: [aRepository]) {
1 * tryStubVoid(_) >> {}
}
when:
...
then:
...
}
}
Спасибо - я только что вновь это и узнали много нового о дизайне, так как я задал вопрос. Теперь я согласен с вами в том, что лучшим дизайном будет функция bulkMessageProcessingService и individualMessageProcessingService. Таким образом, тестирование является тривиальным с макетом. – John