我被告知我应该进行JUnit测试以检查所有代码是否正常工作。我对JUnit一无所知,这就是为什么我要问你们。无论如何,这是我的代码:
package cst8284.shape;
public abstract class BasicShape {
private double width;
public double getWidth(){return width;}
public void setWidth(double width){this.width = width;}
@Override
public String toString(){
return ("BasicShape Overrides " + super.toString());
}
public abstract double getArea();
public abstract double getPerimeter();
}
这是我应该进行测试的地方,
package cst8284.shape;
public class TestBasicShape {
public static void main(String[] args){
Circle circle = new Circle(2.0);
System.out.println(circle.toString());
System.out.println("The perimeter of the circle is " + circle.getPerimeter());
System.out.println("The area of the circle is: " + circle.getArea() + "\n");
Square square = new Square(2.0);
System.out.println(square.toString());
System.out.println("The perimeter of the square is " + square.getPerimeter());
System.out.println("The area of the square is: " + square.getArea() + "\n");
Rectangle rect1 = new Rectangle(2.0,3);
System.out.println(rect1.toString());
System.out.println("The perimeter of the rectangle is " + rect1.getPerimeter());
System.out.println("The area of the rectangle is: " + rect1.getArea() +"\n");
Rectangle rect2 = new Rectangle(rect1);
Rectangle rect3 = new Rectangle(2.0, 1.0);
System.out.println("The square and the circle are " + (square.equals(circle)?"":"not ") + "equal");
System.out.println("The rectangle and the square are " + (rect1.equals(square)?"":"not ") + "equal");
System.out.println("Rectangles 1 and 2 are " + (rect2.equals(rect1)?"":"not ") + "equal");
System.out.println("Rectangles 2 and 3 are " + (rect2.equals(rect3)?"":"not ") + "equal");
}
}
package cst8284.shape;
public class Circle extends BasicShape {
public Circle(){
}
public Circle(double width){
setWidth(width);
}
public Circle(Circle circle) {
setWidth(circle.getWidth());
}
//Getters
public double getArea() {
return Math.PI * (getWidth()/2) * (getWidth()/2);
}
public double getPerimeter() {
return 2*Math.PI*getWidth()/2;
}
@Override
public String toString(){
return ("Circle Overrides " + super.toString());
}
@Override
public boolean equals(Object obj){
if (!(obj instanceof Circle)) {
return false;
}
Circle c = (Circle)obj;
return (this.getWidth() == c.getWidth());
}
}
package cst8284.shape;
public class Square extends BasicShape{
public Square() {
}
public Square(double width) {
setWidth(width);
}
public Square(Square square) {
setWidth(square.getWidth());
}
//Getters
public double getArea() {
return getWidth()*2;
}
public double getPerimeter() {
return 4*getWidth();
}
@Override
public String toString(){
return ("Square Overrides " + super.toString());
}
@Override
public boolean equals(Object obj){
if (!(obj instanceof Square)) {
return false;
}
Square s = (Square)obj;
return (this.getWidth() == s.getWidth());
}
}
package cst8284.shape;
public class Rectangle extends Square{
private double height;
public Rectangle() {
}
public Rectangle(double width, double height) {
setWidth(width);
setHeight(height);
}
public Rectangle(Rectangle rectangle) {
setWidth(rectangle.getWidth());
setHeight(rectangle.getHeight());
}
public double getHeight(){
return height;
}
public void setHeight(double height){
this.height=height;
}
public double getArea() {
return getWidth()*getHeight();
}
public double getPerimeter() {
return 2*(getHeight()+getWidth());
}
@Override
public String toString(){
return ("Rectangle Overrides " + super.toString());
}
@Override
public boolean equals(Object obj){
if (!(obj instanceof Rectangle)) {
return false;
}
Rectangle r = (Rectangle)obj;
return (this.getWidth() == r.getWidth() && this.getHeight() == r.getHeight());
}
}
在这个程序中,我试图计算圆形和方形(BasicShape的子类)和Rectangle(Square的子类)的面积和周长,并尝试比较每个形状是否相等(形状或大小)< / p>
提前谢谢!
答案 0 :(得分:0)
我发现进行测试的最简单方法是为您希望在系统中测试其行为的每个类创建一个测试类,并将这些测试类放在一个单独的包中。 然后,假设您要测试矩形类中的方法。
//imports
public void testRectangle(){
Rectangle rectange;
@Before
public void setup(){
rectangle = new Rectangle();
}
//Say you want to test whether the setHeight method works as it should
@Test
public void testSetHeight(){
rectangle.setHeight(10.0);
assertEquals(10.0, rectangle.getHeight());
}
//The rest of the methods you would like to test
有几点需要注意: 测试类中的方法永远不会接受任何参数。 @Before意味着该方法将在每个测试方法之前运行。这允许您设置运行测试所需的任何内容。在每个测试方法之前必须有@Test。我上面提供的示例非常简单,并非详尽无遗,因此您应该查看JUnit文档并了解更多信息。