关于Eclipse中Junit的异常问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Eclipse中Junit的异常问题相关的知识,希望对你有一定的参考价值。

我写好一个Junit后运行,一直出现以下异常:

java.lang.IllegalArgumentException: Error: parameter '-port' not specified
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:299)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.init(RemoteTestRunner.java:210)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:195)

我搜了一下,有人说这是一个Bug,重新安装以下JDK,我重装了两遍后问题依旧,哪位高手知道怎么解决,帮帮忙吧!感激不尽!
......我是楼主,2楼说的就不对题啊,我问的是怎么解决我出现的那个异常错误,不是如何创建一个Junit…………不过还是谢谢2楼了

参考技术A JUnit是Java进行单元测试的一个框架, 需要下载junit, 3.8版本和后来的4.0以后版本编写测试的方法略有不同,
在3.8.2中需要导入junit.framework.中的类, 进行测试的类必须继承自TestCase类, 测试方法名称中需要含test字样, 可以在setup和teardown函数中管理一些每个测试函数都需要的资源比如数据库连接等,在测试函数中使用assert开头的函数来进行测试代码开发.以下是从junit文档中摘出的范例:
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

/**
* Some simple tests.
*
*/
public class SimpleTest extends TestCase
protected int fValue1;
protected int fValue2;

protected void setUp()
fValue1= 2;
fValue2= 3;

public static Test suite()

/*
* the type safe way
*
TestSuite suite= new TestSuite();
suite.addTest(
new SimpleTest("add")
protected void runTest() testAdd();

);

suite.addTest(
new SimpleTest("testDivideByZero")
protected void runTest() testDivideByZero();

);
return suite;
*/

/*
* the dynamic way
*/
return new TestSuite(SimpleTest.class);

public void testAdd()
double result= fValue1 + fValue2;
// forced failure result == 5
assertTrue(result == 6);

public void testDivideByZero()
int zero= 0;
int result= 8/zero;
result++; // avoid warning for not using result

public void testEquals()
assertEquals(12, 12);
assertEquals(12L, 12L);
assertEquals(new Long(12), new Long(12));

assertEquals("Size", 12, 13);
assertEquals("Capacity", 12.0, 11.99, 0.0);

public static void main (String[] args)
junit.textui.TestRunner.run(suite());



在4.0.2中的变化是:
测试需要@org.junit.Test的Annotation标记,其他部分也使用了Annotation标记,setup和teardown使用@org.junit.Before 和@org.junit.After, 在eclipse3.1的环境中不支持4.0.2, 可以使用junit 4.0.2中提供的adapter类来帮助eclipse内置的junit发现新版本的测试函数
参考技术B eclipse 版本的问题,重新换一个版本本回答被提问者采纳

如何在junit中测试异常[重复]

【中文标题】如何在junit中测试异常[重复]【英文标题】:How to test for the exception in junit [duplicate] 【发布时间】:2018-07-20 11:22:09 【问题描述】:

假设我的方法 myMethod 检查了一系列场景,然后相应地抛出异常而不处理这些异常。

public MyResponse myMethod(MyRequest req)

    try
       
          if(req.property1 == null || req.property1.isEmpty())
             throw new Exception("Property 1 is null of empty");

          if(req.property2 == null || req.property2.isEmpty())
             throw new Exception("Property 2 is null of empty");

          //if no problem is found then proceed ...
       
       catch(Exception e)
       
          //log error
          throw e;
       


如何测试引发的异常或至少检查与异常一起发送的消息?

@Test
public void aNullOrEmptyProperty1CausesExceptionTest() throws Exception 
    //..
    String property1 = "";
    req.setProperty1(property1);
    //...
    MyResponse response = target.myMethod(req);

    //How to check for the exception?

感谢您的帮助

【问题讨论】:

就像你在 myMethod 中所做的一样,你会想要 catch 它。 我需要赶上吗? 【参考方案1】:

我不知道它是否适用于所有版本的 JUnit(我使用的是 junit 4.12)。我通常做的是在Test注解之后添加预期的异常,例如:

@Test(expected = MySpecificException.class)

还有其他方法可以做,但这是可能的。您可以创建一个特定的 MySpecificException 类(它扩展了 Exception 类),然后在代码中抛出这个特定的异常。然后你可以用junit检查它是否正确抛出。

玩得开心!

【讨论】:

查看链接的重复答案,了解为什么这并不总是有效。 它工作正常。如果您想访问异常对象并读取发送的消息怎么办?

以上是关于关于Eclipse中Junit的异常问题的主要内容,如果未能解决你的问题,请参考以下文章

为啥 JUnit 测试异常总是失败? [复制]

运行 JUnit 测试时找不到类异常

使用 Junit 和 Mockito 嵌套异常问题测试 POST Api

JUnit 5:如何断言抛出异常?

如何在junit中测试异常[重复]

JUnit 测试异常 [重复]