中口です。
石井 勝 wrote:
> つまり,実装クラス Foo のテストについて,テストメソッド testA では
> MockFooA クラスという MockObject, テストメソッド testB では MockFooB
> クラスという MockObject がほしい場合,AspectJ では対応できないのでは
> ないかと.AspectJ では,すでにフックされている Foo クラスが実体として
> あるわけですから.
こういうことでしょうか。
public aspect CallReplacement{
pointcut callToGetCustomer():
call(Customer Manager.getCustomer());
pointcut InTestA():
cflow(execution(public void ManagerTest.testA()));
pointcut InTestB():
cflow(execution(public void ManagerTest.testB()));
Object around(): callToGetCustomer() && InTestA(){
return new MockObjectA();
}
Object around(): callToGetCustomer() && InTestB(){
return new MockObjectB();
}
}
同じメソッドが対象でも、特定のフロー(cflow)によって pointcut を切り替える
ことができます。
また、
public aspect CallReplacement{
pointcut callToGetCustomer():
call(Customer Manager.getCustomer());
pointcut InTestA():
cflow(execution(public void ManagerTest.testA()));
pointcut InTest():
cflow(execution(public void ManagerTest.test*()));
Object around(): callToGetCustomer() && InTestA(){
return new MockObjectA();
}
Object around(): callToGetCustomer() && InTest(){
return new MockObjectB();
}
}
こんな感じで、testA だけは MockObjectA を、他のテストメソッド(test*) では
MockObjectB を返すようにすることもできます。
NAKAGUCHI Takao
takao-n@....jp