JUnit测试检查三角形是否是矩形

时间:2014-10-14 11:04:18

标签: java unit-testing geometry

我们有一个界面Rtriangle。

public interface Rtriangle {

 int getApexX1();

 int getApexY1();

 int getApexX2();

 int getApexY2();

 int getApexX3();

 int getApexY3();
}

有课

public final class RtriangleProvider {

public static Rtriangle getTriangle() {

    return new Rtriangle() {            
        @Override
        public int getApexY3() {
            return 1;
        }

        @Override
        public int getApexY2() {
            return 1;
        }

        @Override
        public int getApexY1() {
            return 1;
        }

        @Override
        public int getApexX3() {
            return 1;
        }

        @Override
        public int getApexX2() {
            return 1;
        }

        @Override
        public int getApexX1() {
            return 1;
        }
    };
 }
}

需要编写一个检查矩形三角形的测试。如果没有,应输出错误。 我写了一个样本测试,但事实并非如此。

public class TriangleTest {

@Test
public void testGetTriangle() {
    Rtriangle rt = RtriangleProvider.getTriangle();

    int x1 = rt.getApexX1();
    int x2 = rt.getApexX2();
    int x3 = rt.getApexX3();
    int y1 = rt.getApexY1();
    int y2 = rt.getApexY2();
    int y3 = rt.getApexY3();

    int side1 = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);
    int side2 = (x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2);
    int side3 = (x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3);

    boolean hypo1 = (side1 == (side2 + side3));
    boolean hypo2 = (side2 == (side1 + side3));
    boolean hypo3 = (side3 == (side1 + side2));

    boolean result = hypo1 || hypo2 || hypo3;

    if (!result) {
        throw new AssertionError();
    }
}
}

也许我没有正确计算派对。 请帮助。

1 个答案:

答案 0 :(得分:0)

您可以在这里检查三角形是否满足pythagoras theorem

你在这做同样的事情。

您应该能够创建不同的点(3组坐标)。然后你可以使用这个逻辑。

在您的情况下,所有三个点都相同(1,1)。这不是三角形。您可以尝试以下

现在你必须聪明。

boolean result = hypo1 || hypo2 || hypo3; // by pythagoras theorem only one 
                                          // should true

不能全部都是true

更改

  boolean result = hypo1 || hypo2 || hypo3;

  boolean result=false;
  boolean[] all = { hypo1, hypo2,hypo3 };   
  boolean result=false;
  for (boolean a : all) {
     for (boolean b: all) {
        for(boolean c:all){
           result =(a^b^c) && !(a&&b&&c);
          }
     }
  }

为什么?

  boolean result = hypo1 || hypo2 || hypo3;// this will give you true 
                                           // for all 3 variables are true

这是不正确的。你必须放弃false