使用junit在Java中测试无修饰符方法

时间:2012-11-08 03:39:27

标签: java unit-testing

我有以下方法,在我的Column类中没有完全声明修饰符。

float maximumActiveDutyCycle(ArrayList<Column> columns)
{
    // TODO: change public back to default
    float maximumActiveDutyCycle = 0.0f;
    for (Column column : columns)
    {
        if (column.activeDutyCycle > maximumActiveDutyCycle)
        {
            maximumActiveDutyCycle = column.activeDutyCycle;
        }
    }
    return maximumActiveDutyCycle;
}

但是我在TestColumn类中也有以下测试方法。我想知道是否有人可以告诉我应该如何测试我的方法,因为我不知道如何从Test类访问它。谢谢!

public void testMaximumActiveDutyCycle()
{
    this.column00.setActiveDutyCylce(1.1f);
    this.column01.setActiveDutyCylce(1.3f);
    this.column33.setActiveDutyCylce(1.35f);
    this.column57.setActiveDutyCylce(1.355f);
    Set<Column> columns = new HashSet<Column>();
    columns.add(column00);
    columns.add(column01);
    columns.add(column33);
    columns.add(column57);



}

2 个答案:

答案 0 :(得分:2)

理想情况下,您的单元测试类应与您的类位于相同的类路径包中。

src/main/java/com/yourcompany/project <- your project's classes
src/test/java/com/yourcompany/project <- your unit tests

因此,在您的单元测试类中,您可以访问具有包访问可见性的方法:

Column column = new Column()
column.maximumActiveDutyCycle(columns);

代码示例:

的src / 主要 / JAVA / SG /爪哇/测试

package sg.java.test;

public class Myclass {
    float maximumActiveDutyCycle() {
        return 0f;
    }
}

的src /的测试 / JAVA / SG /爪哇/测试

package sg.java.test;

import static org.junit.Assert.assertTrue;

import org.junit.Test;

public class MyclassTest {
    @Test
    public void testMaximumActiveDutyCycle() {
        Myclass clazz = new Myclass();

        assertTrue(clazz.maximumActiveDutyCycle() == 0f);
    }
}

编辑:更改了单元测试的类名,应使用Test进行后期修复,而不是前缀。虽然方法名称应按惯例以test为前缀。

enter image description here

答案 1 :(得分:0)

您的方法具有默认(包)范围。您的测试类必须与Column类位于同一个包中,以使其可见。

请注意,即使您的Column类位于src/文件夹中,并且您的测试位于test/文件夹中,只要包名称在相应的源文件夹中相同,你的班级将可见。