在Maven项目中,我在同一个包中有测试类和源类,但是在不同的物理位置.
.../src/main/java/package/** <-- application code
.../src/test/java/package/** <-- test code
Run Code Online (Sandbox Code Playgroud)
访问测试类中的源类没有问题,但是我想在main方法中运行一个测试运行器并访问它,AllTest.class以便我可以创建jar并执行我的测试.
public static void main(String[] args) {
// AllTest not found
Result result = JUnitCore.runClasses(AllTest.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为我无法访问测试代码.我不明白,因为他们在同一个包中.
问题:如何从应用程序类访问测试类?或者,Maven如何打包包含测试类和执行测试的胖罐?
在抽象类中,哪个访问修饰符必须用于方法,因此子类可以决定它是否应该是公共的?是否可以"覆盖"Java中的修饰符?
public abstract class A {
??? void method();
}
public class B extends A {
@Override
public void method(){
// TODO
}
}
public class C extends B {
@Override
private void method(){
// TODO
}
}
Run Code Online (Sandbox Code Playgroud)
我知道静态绑定会有问题,如果有人打电话:
// Will work
A foo = new B()
foo.method();
// Compiler ?
A foo = new C();
foo.method();
Run Code Online (Sandbox Code Playgroud)
但也许还有另一种方式.我怎么能做到这一点?
让我们假设一个简单的方法,它抛出一IndexOutOfBoundsException
对无效的索引(2d数组).
我如何测试,所有坏指数组合都会引发异常?
(当然,如果一个电话抛出异常,这个测试将不会继续)
@Test(expected = Exception.class)
public void validateIndices(){
check(0,-1);
check(-1,0);
check(0,COLS + 1);
check(ROWS + 1, 0);
}
Run Code Online (Sandbox Code Playgroud)
是否有一种常用的方法来测试方法的参数变化?
我不明白为什么函数调用中使用的宏不起作用.
#define MAX 255;
printf("max value %d", MAX);
Run Code Online (Sandbox Code Playgroud)
但这是
#define MAX 255;
int m = MAX;
printf("max value %d", m);
Run Code Online (Sandbox Code Playgroud)
在编译之前,预处理器不是替换值.他为什么抱怨?