【发布时间】:2018-10-24 19:22:01
【问题描述】:
我有一个抽象基测试类和一个接口。在测试类内部,声明了一个接口类型的私有字段。
abstract class FibonacciTest {
*private FibonacciImplementation fibonacciImplementation;*
public FibonacciImplementation getImplementation(){
return this.fibonacciImplementation;
}
protected void setImplementation(FibonacciImplementation fibimplem){
this.fibonacciImplementation = fibimplem;
}
abstract void createFibonacciImplementation();
@BeforeEach
void createImplementation(){
createFibonacciImplementation();
}
@Test
void invalidPosition(){
assertEquals(new BigInteger("-2"),
fibonacciImplementation.calculateFib(-2));
}
界面是:
public interface FibonacciImplementation {
BigInteger calculateFib(int position);
}
基础测试类的子测试类是这样的:
public class RecursiveFibonacciTest extends FibonacciTest{
@BeforeEach
void createFibonacciImplementation(){
fibonacciImplementation = new RecursiveFibonacciImplementation();* error is here
}
}
递归斐波那契的实现是这样的:
public class RecursiveFibonacciImplementation implements FibonacciImplementation {
@Override
public BigInteger calculateFib(int position) {
if(position < 0 )
return new BigInteger("" + position);
if(position == 1 || position == 0)
return new BigInteger("1");
return calculateFib(position-1).add(calculateFib(position-2));
}
}
我遇到的问题是,在子测试类中,编译器抱怨我试图访问一个私有字段。 private FibonacciImplementation fibonacciImplementation; 字段。我如何删除该错误。如何访问fibonacciImplementation? getter 和 setter 似乎不起作用。编译器说fibonacciImplementation has private access in FibonacciTest。
请注意,要求它必须是私有字段。
【问题讨论】:
-
为什么一定要
private? -
将
fibonacciImplementation标记为受保护,或提供setter方法。 -
你为什么不在
FibonacciTest. createImplementation中初始化fibonacciImplementation?就像这样fibonacciImplementation = createFibonacciImplementation()。 -
@PM 这是作业的要求
-
@AndrewS 我在哪里放置 setter 方法?在基类内部?
标签: java unit-testing