访问方法参数或返回方法的值

时间:2015-11-09 09:09:33

标签: java junit aop aspectj

我想获得JUnit测试的结果。它保存在TestResult类中,它是TestCase类的run方法的返回值,也是TestCase类的run方法的参数。

请参阅此链接以获取JUnit的TestResult类和TestCase类。

http://junit.sourceforge.net/doc/cookstour/cookstour.htm

我可以在运行测试时访问TestCase类。

我的问题是:是否可以在运行完成时访问方法的参数,或者在执行方法后可以获取方法的返回值?

我正在为我的论文做方面编程。在那里我可以访问TestCase类。在执行测试用例方法时。我想得到它的结果,无论测试是通过还是失败。这样我就可以使用这些信息。如何以编程方式获得测试结果?

以下是示例代码:

public void removeShowTime(int pos){
    final JsonNode movieList = new ObjectMapper().readTree(json).get("movieList").get(0);
    final JsonNode showList = movieList.get("showtimesList");
    Iterator<JsonNode> itr = showList.iterator();
    int counter = 0
    while(itr.hasNext() && counter<=pos){
       if(counter==pos){
           itr.remove();
       }
       counter++;
    }
}

这里我可以访问TestCase类但是如何在测试方法执行后获得测试结果。任何想法或问题?

ILKE

2 个答案:

答案 0 :(得分:0)

如果您正在执行如上所示的测试,则检测成功/失败非常简单。如果.run()抛出AssertionError,则测试失败,如果run()抛出其他测试错误,则测试成功。

答案 1 :(得分:0)

安德鲁是绝对正确的,但是对于它的价值,你想看到一个AOP解决方案,所以我在AspectJ中为你准备了一个。但我不喜欢旧的JUnit样式,所以我使用 List<String> list = new ArrayList<String>(); list.add(id); // add current item id to the head of list list.addAll(map.get(id).idList); 注释准备了一个JUnit 4测试用例,而不是继承自@Test。我认为你应该熟悉JUnit 4,因为它已经存在了足够长的时间并且是现在的标准。

正在测试的课程(非常简单):

TestCase

JUnit 4测试,其中一个失败的断言和一个测试产生计划外的运行时错误:

package de.scrum_master.app;

public class Calculator {
    public static int add(int summand1, int summand2) {
        return summand1 + summand2;
    }

    public static int subtract(int minuend, int subtrahend) {
        return minuend - subtrahend;
    }

    public static int multiply(int factor1, int factor2) {
        return factor1 * factor2;
    }

    public static int divide(int dividend, int divisor) {
        return dividend / divisor;
    }
}

方面捕获成功和失败的测试:

package de.scrum_master.app;

import static org.junit.Assert.*;
import org.junit.Test;

public class CalculatorTest {
    @Test
    public void testAdd() {
        assertEquals(33, Calculator.add(11, 22));
        assertEquals(12, Calculator.add( 4,  8));
        assertEquals(11, Calculator.add(11,  0));
    }

    @Test
    public void testSubtract() {
        assertEquals(33, Calculator.subtract(44, 11));
        assertEquals(12, Calculator.subtract(12,  0));
        assertEquals(11, Calculator.subtract(19,  8));
    }

    @Test
    public void testMultiply() {
        assertEquals(33, Calculator.multiply( 3, 11));
        assertEquals(12, Calculator.multiply( 4,  3));
        // This assertion should fail
        assertEquals(11, Calculator.subtract(10,  5));
    }

    @Test
    public void testDivide() {
        assertEquals(33, Calculator.divide(99, 3));
        assertEquals(12, Calculator.divide(51, 4));
        // This call should cause an exception
        assertEquals(11, Calculator.divide(11, 0));
    }
}

运行JUnit测试时的控制台日志:

package de.scrum_master.aspect;

import org.junit.Test;

public aspect TestResultInterceptor {
    pointcut testMethods() :
        execution(@Test public void *(..));

    after() returning : testMethods() {
        System.out.println(
            "Test OK: " +
            thisJoinPointStaticPart.getSignature()
        );
    }

    after() throwing (Throwable throwable) : testMethods() {
        System.out.println(
            (throwable instanceof AssertionError ? "Test failed: " : "Error during test: ") +
            thisJoinPointStaticPart.getSignature()
        );
        System.out.println("  " + throwable);
    }
}