2015-06-08 57 views
0

我有Mappa类的子类MappaFermi和属性mappaName(从Enum中选择)。在类和子类中的Java属性

我想写一个构造函数MappaFermi()的测试,但我似乎无法正确写入它。

public class Mappa { 
    private Name mappaName; 
    public Mappa (Name mappaName){ 
     this.mappaName=mappaName; 
     ... 

    } 
} 

public class MappaFermi extends Mappa { 
    public MappaFermi(Name mappaName) { 
     super(mappaName); 
     } 
    } 

public enum Name { 
FERMI, GALILEI, GALVANI 
} 

我已经尝试了eclipse给出的所有建议,但仍然出现错误。

public class MappaFermiTest { 
     @Test 
      public void testMappaFermi() { 
       Mappa mappa = new MappaFermi(Name.FERMI); 
       assertNotNull(mappa); 
      } 

@Test 
      public void testMappaFermi() { 
       Mappa mappa = new MappaFermi(); 
       assertNotNull(mappa); 
      } 
    } 
+0

,什么是错误? – user3707125

+0

只有第一个测试用例应该被编译 - 但是你也有3个同名的方法,这也表明了一个问题。 – Zelldon

+0

@ user3707125构造函数是undefined – mpz

回答

0

如果你想使用new MappaFermi(),你必须定义一个无参数的构造函数。这是构造函数的默认,并且任何没有其他构造函数的类都将隐式地具有无参数构造函数。但是,只要你定义了一个带参数的构造函数,比如Mappa(Name mappaName),no-arg的默认构造函数就不再可用,并且必须被明确定义。

public MappaFermi() { 
    super(null); // or whatever is a good 'default' name 
} 

此外,Mappa mappa = new MappaFermi(whatever);后立即测试assertNotNull(mappa);是很没有意义的,因为有没有办法它可能是null在这一点上。

0

犯了一些错误的位置:

具有相同的名称testMappaFermi - 三个方法。
测试可以在一种方法中完成,或者如果您真的需要三种方法,您可以重命名这些方法。

- 第二个测试写得不正确。什么工作:

Name mappaName = Name.FERMI; 
Mappa mappa = new MappaFermi(mappaName); 

-The第三次测试使用new MappaFermi()没有被定义一个无参数的构造函数。
要么你想把一个参数的构造里,或者写一个无参数的构造像这样:

public MappaFermi() { 
    super(Name.FERMI); 
}