有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JUNIT测试Eclipse IDE引发错误

我有下面的类和方法,我试图让JUNIT测试工作,但它抛出了一个错误。这是上课时间

package christmas;

public class Worksheet1q1 {

    public static void main(String[] args) {
        int m = 3, n = 4;
        int result = power(m, n);
        System.out.printf( "power method  ");
        System.out.printf( "%d^%d = %d", m, n, result);


    } 

    //* code for  power

static int power(int m, int n) {



    if (n != 0)



        return (m * power(m, n - 1));
    else


 }}

这是我的JUNIT测试类和方法

  package christmas;


  import static org.junit.Assert.assertThat;

  import org.junit.Test;



  public class Worksheet1q1Test {

    @Test


    public void twoAndThreeissix(int m, int n) throws Exception {




    int result = Worksheet1.power(2, 3);

    assertThat(result, is(8L));

    }}

我有两个问题。首先,当我运行测试类时,我有一个错误,方法“christmas找不到”,但christmas是我的包名,所以不确定Eclipse为什么认为它是一个方法

另外,我在assertThat上得到了一个错误-该错误表明找不到方法“is”

这是我在JUNIT测试中的第一次尝试,因此我们将非常感谢您的帮助


共 (2) 个答案

  1. # 1 楼答案

    你的代码不好

    这在IntelliJ中运行良好:

    package christmas;
    
    public class Worksheet1q1 {
    
        public static final int DEFAULT_BASE = 3;
        public static final int DEFAULT_EXPONENT = 4;
    
        public static void main(String[] args) {
            int m = (args.length > 0 ? Integer.parseInt(args[0]) : DEFAULT_BASE);
            int n = (args.length > 1 ? Integer.parseInt(args[1]) : DEFAULT_EXPONENT);
            int result = power(m, n);
            System.out.printf("%d^%d = %d", m, n, result);
        }
    
        static int power(int m, int n) {
            if (n < 0) throw new IllegalArgumentException("negative powers are not allowed");
            if (n == 0) {
                return 1;
            } else {
                return (m * power(m, n - 1));
            }
        }
    }
    

    接下来我将编写单元测试:

    package christmas;
    
    import org.junit.Assert;
    import org.junit.Test;
    
    public class Worksheet1q1Test {
    
        @Test
        public void testPower_Success() {
            // setup
            int m = 2;
            int n = 3;
            int expected = 8;
            // exercise
            int actual = Worksheet1q1.power(m, n);
            // assert
            Assert.assertEquals(expected, actual);
        }
    
        @Test
        public void testPower_ZeroPower() {
            // setup
            int m = 2;
            int n = 0;
            int expected = 1;
            // exercise
            int actual = Worksheet1q1.power(m, n);
            // assert
            Assert.assertEquals(expected, actual);
        }
    
        @Test(expected = IllegalArgumentException.class)
        public void testPower_NegativePower() {
            // setup
            int m = 2;
            int n = -3;
            int expected = 1;
            // exercise
            Worksheet1q1.power(m, n);
        }
    }
    
  2. # 2 楼答案

    我运行了你的代码,并在错误出现时修复了它们。我在命令行上运行了它。我已将所有导致错误的内容放入注释中:

    package christmas;
    
    public class Worksheet1q1 {
    
        public static void main(String[] args) {
            int m = 3, n = 4;
            int result = power(m, n);
            System.out.printf( "power method  ");
            System.out.printf( "%d^%d = %d", m, n, result);
        } 
    
        //* code for  power
        static int power(int m, int n) {
          if (n != 0)
            return (m * power(m, n - 1));
          else return 1;    // added due to below error
        }                   // compile error, illegal start of statement.
    }
    

    对于测试,我添加了一个不会失败的测试,使用int而不是long

    package christmas;
    
    import org.junit.Test;
    import static org.junit.Assert.assertEquals;
    import static org.hamcrest.CoreMatchers.is; //  error: cannot find symbol
    
    // compiler: warning: [deprecation] <T>assertThat(T,Matcher<? super T>) in Assert has been deprecated
    // import static org.junit.Assert.assertThat;
    import static org.hamcrest.MatcherAssert.assertThat;
    
    public class Worksheet1q1Test {
    
        @Test
        // FAILURES!!!  Method twoAndThreeIsEightLong should have no parameters
    //    public void twoAndThreeIsEightLong(int m, int n) throws Exception {
        public void twoAndThreeIsEightLong() throws Exception {
    //      int result = Worksheet1.power(2, 3); // error: cannot find symbol
          int result = Worksheet1q1.power(2, 3);
          assertThat(result, is(8L));  // result is an int - will fail!
        }
    
        @Test
        public void twoAndThreeIsEightInt() throws Exception {
          int result = Worksheet1q1.power(2, 3);
          assertThat(result, is(8));
        }
    
        @Test
        public void twoAndThreeIsEight() throws Exception {
          int result = Worksheet1q1.power(2, 3);
          assertEquals(result, 8);
        }
    }
    

    汇编:

    javac -cp C:\..snip..\lib\junit-4.13.jar;C:\..snip..\lib\hamcrest-core-1.3.jar;target -d target src/christmas/*.java
    

    运行:

    java -cp C:\..snip..\lib\junit-4.13.jar;C:\..snip..\lib\hamcrest-core-1.3.jar;target org.junit.runner.JUnitCore christmas.Worksheet1q1Test 
    

    结果:

    JUnit version 4.13
    ...E
    Time: 0.042
    There was 1 failure:
    1) twoAndThreeIsEightLong(christmas.Worksheet1q1Test)
    java.lang.AssertionError:
    Expected: is <8L>
         but: was <8>
            at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
            at org.junit.Assert.assertThat(Assert.java:964)
            at org.junit.Assert.assertThat(Assert.java:930)
            at christmas.Worksheet1q1Test.twoAndThreeIsEightLong(Worksheet1q1Test.java:18)
    
    FAILURES!!!
    Tests run: 3,  Failures: 1