현재 aspectj를 사용하는 몇 가지 모니터링 도구로 작업 중입니다. 이 도구는 기술에 독립적 (가능한 멀리)해야하기 때문에 Spring을 주입에 사용하지 않습니다. 그러나 나는 나의 면모를 단위 테스트하기를 원한다.어 스펙트를 조롱하는 방법
화면 예 :
@Aspect
public class ClassLoadAspect {
private Repository repository;
public ClassLoadAspect() {
repository = OwlApiRepository.getInstance();
}
@After("anyStaticInitialization()")
public void processStaticInitilization(JoinPoint jp) {
Class type = jp.getSourceLocation().getWithinType();
if (type.isInterface()) {
repository.storeInterfaceInitialization(type);
} else if (type.isEnum()) {
repository.storeEnumInitialization(type);
} else {
repository.storeClassInitialization(type);
}
}
@Pointcut("staticinitialization(*) && !within(cz.cvut.kbss.odra..*)")
public void anyStaticInitialization() {
}
public Repository getRepository() {
return repository;
}
public void setRepository(Repository repository) {
this.repository = repository;
}
}
그러나, 그러므로, 정말 단위 테스트 (저장소 필드가 조롱한다 (사용 mockito))를 구성하는 방법, 잘 모릅니다,하지만 통제 측면 생성이없는 종속성을 수동으로 설정할 수 없습니다. 인스턴스를 가져 오려면 어떻게해야합니까? 또는 aspectj 측면의 단위 테스트 방법에 대한 다른 시나리오가 있습니다.
감사합니다.
내 솔루션 싫어하는 것 : 정적 메소드의 글로벌 교체은 (는) 자기 테스트 할 수 있습니다 - (대신 새로운 하나를 설정하는) 내가 수동으로 저장소 모의를 다시 설정해야합니다. 또한 모의 저장소 개체에 액세스하기 위해 모의 홀더를 도입해야했습니다. 세 번째 것은 내가 모의 수식을 설정하기 위해 바이트 코드로 숙성하기를 좋아하지 않는다는 것입니다. 이것은 언어의 표준 방법으로 수행되어야한다고 생각합니다. (가능하지 않으면 imho는 aspectj의 결함을 보여줍니다. 디자인). 그러나 코드에서 솔루션이 수행 할 수도 있습니다 (적어도 보유자는 필요하지 않습니다) .-). – malejpavouk
찍은 포인트, 현상금은 당신 것입니다. 감사합니다 :-) – malejpavouk
죄송합니다. 주석에 사용할 수있는 문자 수가 너무 적기 때문에 내 대답에 주석을 추가하기로 결정했습니다. 하지만 어쨌든 현상금 덕분에 감사드립니다. :) – kriegaex