java测试类 main方法中有许多Junit的@Test方法,如何控制只运行其中的一个测试方法呢?

JUnit中获取测试类及方法的名称实现方法
投稿:junjie
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了JUnit中获取测试类及方法的名称实现方法,本文使用了JUnit中提供的TestName实现,不过还有一些编程细节需要注意,需要的朋友可以参考下
在JUnit的测试中,有时候需要获得所属的类(Class)或者方法(Method)的名称,以方便记录日志什么的。
在JUnit中提供了类来做到这一点,在org.junit.rules中:
public class TestName extends TestWatcher {
private String fN
protected void starting(Description d) {
fName = d.getMethodName();
* @return the name of the currently-running test method
public String getMethodName() {
虽然TestName只提供了方法的名称,要加上类的名称很容易,只需对TestName稍作修改如下:
protected void starting(Description d) {
fName = d.getClassName() + "." + d.getMethodName();
在测试用例中的用法是:
public class NameRuleTest {
@Rule public TestName name = new TestName();
@Test public void testA() {
assertEquals("testA", name.getMethodName());
@Test public void testB() {
assertEquals("testB", name.getMethodName());
大功告成!
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具java使用junit测试私有方法和私有属性 - 为程序员服务
为程序员服务
java使用junit测试私有方法和私有属性
在开发过程中很多类的私有属性和方法也是需要测试的,但是Junit并没有提供一种简单的测试私有方法。而Java中又没有C++那样的友元函数(friend)来实现私有属性和方法仅向测试类开放。我们怎么实现不改变被测代码,又能实现测试任务呢?Java中的反射技术可以帮我们实现这一构想。
先给出被测类:
package JunitT
public class TestClass {
String pus = &This is a public String&;
private String prs = &This is a private String&;
public String getPublicString()
private String getPrivateString()
private String getName(String Name)
return &Your name is &+N
我们可以看到,被测类TestClass有一个私有变量prs,和两个私有方法。
首先我们实现访问私有类:
创建一个叫做TestGetPrivateString()的TestCase
public void TestGetPrivateString() throws IllegalArgumentException, IllegalAccessException
Field [] fa = TestClass.class.getDeclaredFields();
for(Field f :fa){
if(f.getName().equals(&prs&))
f.setAccessible(true);
TestClass t = new TestClass();
String prs = (String)(f.get(t));
System.out.println(prs);
执行这个TestCase,我们会得到结果:
This is a private String
这里面的关键代码有3处
Field [] fa = TestClass.class.getDeclaredFields(); 利用反射得到了所有变量的元数据数组。
f.setAccessible(true); 改变访问属性
String prs = (String)(f.get(t)); 从类的实例中提取出field的内容。
函数的使用方法可以参考:
/javase/1.4.2/docs/api/java/lang/reflect/Field.html
继续实现访问私有方法
其实和feild的方法及其类似只是需要调用Method方法而已。
给出代码:
public void TestGetPM() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException
Method [] ma = TestClass.class.getDeclaredMethods();
for(Method m :ma)
if(m.getName().equals(&getName&))
m.setAccessible(true);
TestClass t = new TestClass();
Object [] prams
={&Lucas&};
String s =(String)m.invoke(t,prams);
System.out.println(s);
您可能的代码
相关聚客文章
相关专栏文章Java注解((Annotation)的使用方法是@注解名 ,能通过简单的词语来实现一些功能。在junit中常用的注解有@Test、@Ignore、@BeforeClass、@AfterClass、@Before、@After、@Runwith、@Parameters
以下是相关的介绍和使用说明:
在junit3中,是通过对测试类和测试方法的命名来确定是否是测试,且所有的测试类必须继承junit的测试基类。在junit4中,定义一个 测试方法变得简单很多,只需要在方法前加上@Test就行了。
注意:测试方法必须是public void,即公共、无返回数据。可以抛出异常。
二.@Ignore
有时候我们想暂时不运行某些测试方法\测试类,可以在方法前加上这个注解。在运行结果中,junit会统计忽略的用例数,来提醒你。但是不建议经常这么做,因为这样的坏处时,容易忘记去更新这些测试方法,导致代码不够干净,用例遗漏。
三.@BeforeClass
当我们运行几个有关联的用例时,可能会在数据准备或其它前期准备中执行一些相同的命令,这个时候为了让代码更清晰,更少冗余,可以将公用的部分提取出来,放在一个方法里,并为这个方法注解@BeforeClass。意思是在测试类里所有用例运行之前,运行一次这个方法。例如创建数据库连接、读取文件等。
注意:方法名可以任意,但必须是public static void,即公开、静态、无返回。这个方法只会运行一次。
四.@AfterClass
跟@BeforeClass对应,在测试类里所有用例运行之后,运行一次。用于处理一些测试后续工作,例如清理数据,恢复现场。
注意:同样必须是public static void,即公开、静态、无返回。这个方法只会运行一次。
五.@Before
与@BeforeClass的区别在于,@Before不止运行一次,它会在每个用例运行之前都运行一次。主要用于一些独立于用例之间的准备工作。比如两个用例都需要读取数据库里的用户A信息,但第一个用例会删除这个用户A,而第二个用例需要修改用户A。那么可以用@BeforeClass创建数据库连接。用@Before来插入一条用户A信息。
注意:必须是public void,不能为static。不止运行一次,根据用例数而定。
与@Before对应。
七.@Runwith
首先要分清几个概念:测试方法、测试类、测试集、测试运行器。
其中测试方法就是用@Test注解的一些函数。测试类是包含一个或多个测试方法的一个**Test.java文件,测试集是一个suite,可能包含多个测试类。测试运行器则决定了用什么方式偏好去运行这些测试集/类/方法。
而@Runwith就是放在测试类名之前,用来确定这个类怎么运行的。也可以不标注,会使用默认运行器。
常见的运行器有:
1. @RunWith(Parameterized.class) 参数化运行器,配合@Parameters使用junit的参数化功能
2.@RunWith(Suite.class)
@SuiteClasses({ATest.class,BTest.class,CTest.class})
测试集运行器配合使用测试集功能
3.@RunWith(JUnit4.class)
junit4的默认运行器
4.@RunWith(JUnit38ClassRunner.class)
用于兼容junit3.8的运行器
5.一些其它运行器具备更多功能。例如@RunWith(SpringJUnit4ClassRunner.class)集成了spring的一些功能
八:@Parameters
用于使用参数化功能。
阅读(...) 评论()扫二维码下载作业帮
2亿+学生的选择
下载作业帮安装包
扫二维码下载作业帮
2亿+学生的选择
如题:Junit测试类里面有多个test,每个test之间有关联关系,想要一个test失败后面的test就不执行了,本人新手,学JUnit4,碰到个问题.有多个@test注释,想要一个test失败,后面的test就不执行了,
扫二维码下载作业帮
2亿+学生的选择
这个不可吧,除非你写个捕获异常之后系统退出.System.exit(0);不过为什么出现异常不让执行后面的了呢;这个没有必然联系吧
因为我拿Junit跟selenium结合做自动化测试,有可能会涉及到流程性的东西。比如说,第一个test,测试登录成功;第二个test测试提交订单。 如果第一个test登录都不成功,第二个就提交不了订单了,第二个test执行就没有意义了。
所以就有了上面说的问题,因为是新手,不知道这样做合不合理? 多谢指点!
这个你可以在一个测试方法里面调用嘛,不成功了就让方法中断不向下执行了
为您推荐:
其他类似问题
扫描下载二维码import junit.framework.TestC
public class Test extends TestCase
public void testDelete()
boolean result=
if(result)
System.out.println(&删除成功&);
System.out.println(&删除失败&);
public void testSave()
System.out.println(&保存成功&);
------解决方案--------------------了解不多,
------解决方案--------------------
你用的应该是3.8的junit包吧,在集成开发环境中运行,它默认会执行所有以test开始的方法。如果只想执行一个或几个,有两种方法:1、修改方法的名称,去掉不想测试的方法名前的test2、使用测试套件来完成
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有}

我要回帖

更多关于 springboot测试类 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信