java应用程序(Application)创建类的对象并测试个方法功能

java应用程序(Application)创建类的对象并测试个方法功能,第1张

MyEclipse中创建Junit 的步骤如下:

1、选择一个存放测试类的package,右键-->new-->Other-->Java-->JUnit-->JUnit Test Case-->填写完测试类的名字,选择所要使用的JUnit 的版本注:JUnit 4支持@解释表示符,建议使用,可根据情况,选择是否自动生成:setUpBeforeClass()注:静态方法,在测试类执的测试方法执行前被系统调用,只被调用一次,tearDownAfterClass()注:静态方法,在测试类的所有测试方法执行完毕后被系统调用,只被调用一次,setUp()注:非静态方法,在每个测试方法执行前,被系统调用,有多少个测试方法,就被调用多少次,tearDown()注:非静态方法,在每个测试方法执行完毕后,被系统调用,有多少个测试方法,就被调用多少次这些方法。 然后,点“finish” ,这样就创建了一个 Junit Case。

2、根据实际情况,写测试函数。下面是一个简单的例子:

import static orgjunitAssert;

import orgjunitAfter;

import orgjunitAfterClass;

import orgjunitBefore;

import orgjunitBeforeClass;

import orgjunitTest;

public class Tc {

@BeforeClass

public static void setUpBeforeClass() throws Exception {

}

@AfterClass

public static void tearDownAfterClass() throws Exception {

}

@Before

public void setUp() throws Exception {

}

@After

public void tearDown() throws Exception {

}

// @Test : 表示这是一个测试用例,只有标识了改符号的函数才会被执行测试

@Test

public void testAdd(){

String str="abc";

assertEquals("abc",str);// 结果判断,assertEquals 是orgjunitAssert自带的静态函数。

}

}

3、右键,run as->Junit Test ,运行完毕,可以看到测试结果:状态条为绿色,表示测试通过,为红色,表示未通过。

这个问题出现在这种情况,你的每个testCase都需要使用某一种初始化比较耗时的对象(资源),举例如数据库连接、Spring Context。我们遇到的问题是Selenium测试中开启和关闭浏览器,如果一个test启动关闭(我们的程序还需要登录和注销),这样测试的时间会 拖的很长,给持续集成带来了困难。

所以,我们需要在每组不会冲突的test中间共享一个浏览器窗口,这样也就需要一个全局的setUp和 tearDown。问题是JUnit 381里面的setUp和tearDown是在每个test之前和之后运行的,如果在里面初始化和关闭浏览器就会造成上面所说的问题。要解决它,就产 生了如下3种思路:

1、升级,使用JUnit4

JUnit4从TestNG里面吸取了两个注释:@BeforeClass和 @AfterClass

用它们注释过的方法就会只初始化一次,完全符合我们的需求。

public class SeleniumTestCase extends SeleneseTestCase4 {

protected static final Log log = LogFactorygetLog(SeleniumTestCaseclass);

protected static Selenium selenium = null;

@BeforeClass

public static void startSelenium() throws Exception {

logdebug("Starting Selenium");

selenium = SeleniumSessiongetCurrentSession()getSelenium();

}

@AfterClass

public static void stopSelenium() throws Exception {

logdebug("Stoping Selenium");

seleniumstop();

}

}

这个里面的selenium = SeleniumSessiongetCurrentSession()getSelenium();其实是个singleton,第一次open new,后来就直接返回selenium的instance(具体参考其它文章)。

这样做非常舒服,因为完全不是Trick,而是新的 feature,用起来踏实。这样,这个类的所有@Test就会公用一个selenium打开的浏览器了。

那么缺点是什么呢?缺点是放到CI环境 的时候如果使用我们习惯的Ant写执行脚本的话必须将Ant升级到17Beta3,因为Ant 165的Junit task不支持JUnit4……当然升级并不会带来代码的变化,但是问题在于Ant 17还是Beta,而且JUnit4需要JDK5的Annotation,你的PM估计要撇嘴了

2、JVM级别钩子法

因为JVM支持关闭时执行制定代码的钩子,而static代码会在类初始化时执行, 再加上Ant调用的是类似命令行的java命令,实际上每一个测试运行在一个完整的JVM启动关闭周期里面,所以也就产生了这种解决方案。

这个方 案来自taowen同学的两则Selenium经验。

代码我恢复了一下,大概是这样:

public abstract class SomeTestCase extends TestCase {

static {

// perform the "global" set up logic

//这里的代码会在类初始化时执行,所以相当于BeforeClass

logdebug("Starting Selenium");

selenium = SeleniumSessiongetCurrentSession()getSelenium();

// and now register the shutdown hook for tear down logic

//将一个匿名方法写到这里,就相当于AfterClass

//给当前的进程注册一个清理线程,当进程退出的时候,会执行线程中的代 码。

RuntimegetRuntime()addShutdownHook(

new Thread(){

public void run() {

logdebug("Stoping Selenium");

seleniumstop();

}

}

);

}

}

这 个方法挺酷的,我认为完全可以被称作“奇技*巧”。缺点就是,有点不好看。

3、还有别的方法,这个来自Selenium网站,似乎是不错 的中庸方案。

import junitframework;

import junitextensionsTestSetup;

public class AllTestsOneTimeSetup {

public static Test suite() {

TestSuite suite = new TestSuite();

suiteaddTest(SomeTestsuite());

suiteaddTest(AnotherTestsuite());

TestSetup wrapper = new TestSetup(suite) {

protected void setUp() {

oneTimeSetUp();

}

protected void tearDown() {

oneTimeTearDown();

}

};

return wrapper;

}

public static void oneTimeSetUp() {

// one-time initialization code

}

public static void oneTimeTearDown() {

// one-time cleanup code

}

}

以上就是关于java应用程序(Application)创建类的对象并测试个方法功能全部的内容,包括:java应用程序(Application)创建类的对象并测试个方法功能、instrumentation test 什么时候调用setup teardown、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10079877.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存