我需要为扩展抽象类的类编写测试。当我需要测试具有super
引用的方法时,问题就开始了。所以代码看起来像这样:
public abstract class AbstractClass{
public String someMethod();
}
public class MyClass extends AbstractClass {
methodToTest(){
//somecode
super.someMethod();
}
}
任何想法我应该如何绕过它?
编辑:
对不起,我还是新手进行单元测试,就在刚才发现为什么这个不能正常工作。上面示例中的MyClass实际上包含一个初始化块,它设置在AbstractClass中声明的someMethod使用的一些字段,因此new AbstractClass.someMethod()
没有给我与super.someMethod
相同的结果。而且,由于我无法初始化AbstractClass,因此无法获得所需的结果。我认为我需要以某种方式嘲笑它,但正如我所说,我是新手,并且不知道该怎么做
public abstract class AbstractClass{
String fieldA;
public String someMethod(){
//does something with fieldA
}
}
public class MyClass extends AbstractClass {
{
setFieldA("something");
}
methodToTest(){
//some code
super.someMethod();
//returns some string based on the fieldA value
}
}
更新以下是我的代码的更新版本。请帮我写测试。我可能会从那里得到它:
public abstract class AbstractClass{
String fieldA;
public String someMethod(){
fieldA = "String" + fieldA;
}
}
public class MyClass extends AbstractClass {
{
setFieldA("Another String");
}
methodToTest(){
fieldA = fieldA + "Yet Another String";
super.someMethod();
return fieldA;
}
}
答案 0 :(得分:0)
您的问题不是单元测试;但更多的是一般误解如何使用抽象类。
首先:如果你的抽象类需要一个字段来完成它的工作,那么你最好不使用一个setter。代替:
public abstract class Base {
private final String thatField;
public Base(String incoming) {
thatField = incoming;
}
..
public class Derived extends Base {
public Derived(String incoming) {
super(incoming);
}
换句话说:该字段似乎是您的类的重要部分。所以明确说明。通过启用构造函数来设置它,您还可以确保
除此之外:当你开始测试某个类时...如果该类只是扩展了Object那么无关紧要;或者如果它扩展到其他类;甚至在扩展抽象类时也是如此。
这就是可以说的;鉴于您的示例不包含有关您的代码“真正”正在做什么的任何具体细节。