Java 如果存在构造函数,如何使JUnit测试失败?

Java 如果存在构造函数,如何使JUnit测试失败?,java,junit,tdd,Java,Junit,Tdd,我正在学习JUnit和测试驱动开发实践。我有空钱界面: public interface Money { } public class CommonMoney implements Money { private CommonMoney() { } public static Money create(String decimalPart, Currency currency) { return new Money() { };

我正在学习JUnit和测试驱动开发实践。我有空钱界面:

public interface Money {

}
public class CommonMoney implements Money {

    private CommonMoney() {

    }

    public static Money create(String decimalPart, Currency currency) {
        return new Money() {
        };
    }
}
实现货币接口的CommonMoney类:

public interface Money {

}
public class CommonMoney implements Money {

    private CommonMoney() {

    }

    public static Money create(String decimalPart, Currency currency) {
        return new Money() {
        };
    }
}
还有测试普通货币的MoneyTest类

public class MoneyTest {

    // some test cases before

    @Test
    public void shouldNotCreateCommonMoneyObjectWithEmptyConstructor() {
        @SuppressWarnings("unused")
        Money money = new CommonMoney();
        fail();
    }
}
目前,测试用例不应该创建CommonMoneyObjectWithEmptyConstructor为红色,但如果CommonMoney的构造函数是私有的,它应该为绿色,如果它是公共的,它应该为红色。可以这样制作测试用例吗?我该怎么做呢

可以这样制作测试用例吗

是的,例如,可以通过使用java反射来实现此测试。否则,您无法从该类之外测试私有构造函数是否存在——代码将无法编译

然而,测试这一点并没有什么意义。访问修饰符的存在实际上是为了方便开发人员并限制访问范围。可以说,范围限制也是为了方便

您的测试应该覆盖公共API,而不是私有实现

可以这样制作测试用例吗

是的,例如,可以通过使用java反射来实现此测试。否则,您无法从该类之外测试私有构造函数是否存在——代码将无法编译

然而,测试这一点并没有什么意义。访问修饰符的存在实际上是为了方便开发人员并限制访问范围。可以说,范围限制也是为了方便

您的测试应该覆盖公共API,而不是私有实现

可以这样制作测试用例吗

是的,例如,可以通过使用java反射来实现此测试。否则,您无法从该类之外测试私有构造函数是否存在——代码将无法编译

然而,测试这一点并没有什么意义。访问修饰符的存在实际上是为了方便开发人员并限制访问范围。可以说,范围限制也是为了方便

您的测试应该覆盖公共API,而不是私有实现

可以这样制作测试用例吗

是的,例如,可以通过使用java反射来实现此测试。否则,您无法从该类之外测试私有构造函数是否存在——代码将无法编译

然而,测试这一点并没有什么意义。访问修饰符的存在实际上是为了方便开发人员并限制访问范围。可以说,范围限制也是为了方便


您的测试应该涵盖公共API,而不是私有实现。

这不是您需要测试的类型

正如Agad所指出的,代码无论如何都不会以这种方式编译,因为通过将构造函数设置为私有,您就不可能使用空构造函数创建对象


编译器正在有效地为您执行检查,因此您不需要编写特定的测试来检查它。

这不是您需要测试的类型

正如Agad所指出的,代码无论如何都不会以这种方式编译,因为通过将构造函数设置为私有,您就不可能使用空构造函数创建对象


编译器正在有效地为您执行检查,因此您不需要编写特定的测试来检查它。

这不是您需要测试的类型

正如Agad所指出的,代码无论如何都不会以这种方式编译,因为通过将构造函数设置为私有,您就不可能使用空构造函数创建对象


编译器正在有效地为您执行检查,因此您不需要编写特定的测试来检查它。

这不是您需要测试的类型

正如Agad所指出的,代码无论如何都不会以这种方式编译,因为通过将构造函数设置为私有,您就不可能使用空构造函数创建对象


编译器正在有效地为您执行检查,因此您不需要编写特定的测试来检查它。

如果构造函数是私有的,您的测试类不会编译。您可以使用反射,但为什么?你不信任和你一起工作的人吗?还要注意,随着系统的增长,实现测试很脆弱,很难维护。如果您只是想确保从未调用私有构造函数(无论出于什么原因),请在构造函数体中抛出已检查的异常。尽管如此,正如agad已经指出的那样,由于构造函数在类之外不可见,您的测试甚至不会编译。如果构造函数是私有的,您的测试类不会编译。您可以使用反射,但为什么?你不信任和你一起工作的人吗?还要注意,随着系统的增长,实现测试很脆弱,很难维护。如果您只是想确保从未调用私有构造函数(无论出于什么原因),请在构造函数体中抛出已检查的异常。尽管如此,正如agad已经指出的那样,由于构造函数在类之外不可见,您的测试甚至不会编译。如果构造函数是私有的,您的测试类不会编译。您可以使用反射,但为什么?你不信任和你一起工作的人吗?还要注意,随着系统的增长,实现测试很脆弱,很难维护。如果您只是想确保从未调用私有构造函数(无论出于什么原因),请在构造函数体中抛出已检查的异常。尽管如此,正如agad已经指出的那样,由于构造函数在类之外不可见,您的测试甚至不会编译。如果构造函数是私有的,您的测试类不会编译。您可以使用反射,但为什么?你不信任和你一起工作的人吗?还要注意,实现测试是脆弱的,很难维护,因为