コードベースには、次の構造があります。
abstract class Bar{
public Bar(){
....
}
....
public Bar(int x, int y){
}
....
}
Bar
によって拡張されFoo
ます。
abstract class Foo extends Bar{
public Foo(){
super();
....
}
public Foo(int x){
super(x,0); // call parent's specific constructor
....
}
....
}
次の jUnit テスト ケースを試しましたが、コンパイルできません。
class FooTest{
Foo _foo;
@Test
void testFooConstructor(){
new Expectations(){
Bar bar;
{
bar = new Bar(anyInt,0); // error, obviously Bar cannot be instantiated.
}
}
_foo = new Foo(anyInt){ // empty implementation
//Override any abstract methods
}
}
}
この SO questionを見たので、上記のアプローチを書きましたが、抽象クラスが開始されない可能性があるため、失敗します。
さらに、私も試しました:
class FooTest{
Foo _foo;
@Test
void testFooConstructor(){
_foo = new Foo(anyInt){ // empty implementation
//Override any abstract methods
}
new Expectations(){
Bar bar;
{
invoke(bar,"Bar",anyInt,0); //Invocations.invoke
}
}
invoke(_foo,"Foo",anyInt);
}
}
ただし、私のテスト結果は次のとおりです。
java.lang.IllegalArgumentException: 互換性のあるメソッドが見つかりません: unit.src.com.test.FooTest$1 の Bar(int,int).(行番号)
どうすれば望ましい結果を得ることができますか? このテストを実装する方法はありますか?