前些日子看到junit可以测试java代码,我想在eclipse下实现一下,找着书写了2个类
import junit.framework.TestCase;public class TestThatWeGetHelloWorldPrompt extends TestCase {
public TestThatWeGetHelloWorldPrompt(String name) {
super(name);
}
public void testSay(){
HelloWorld hi = new HelloWorld();
assertEquals("Hello World!",hi.say());
}
public static void main(String[] args) {
junit.textui.TestRunner.run(TestThatWeGetHelloWorldPrompt.class);
}
}package no1;public class HelloWorld { public String say(){
return "Hello World!";
}
}
为什么运行的时候总说找不到could find the main class.
java.lang.UnsupportedClassVersionError: junit/framework/TestListener (Unsupported major.minor version 49.0)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Exception in thread "main"
import junit.framework.TestCase;public class TestThatWeGetHelloWorldPrompt extends TestCase {
public TestThatWeGetHelloWorldPrompt(String name) {
super(name);
}
public void testSay(){
HelloWorld hi = new HelloWorld();
assertEquals("Hello World!",hi.say());
}
public static void main(String[] args) {
junit.textui.TestRunner.run(TestThatWeGetHelloWorldPrompt.class);
}
}package no1;public class HelloWorld { public String say(){
return "Hello World!";
}
}
为什么运行的时候总说找不到could find the main class.
java.lang.UnsupportedClassVersionError: junit/framework/TestListener (Unsupported major.minor version 49.0)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Exception in thread "main"
package forTest;
public class HelloWorld {
public String say() {
return "Hello World!"; }
}
然后新建一个Junit Test Case,最方便的方式是直接右键点HelloWorld类然后新建,这样它知道是为了测试HelloWorld,会自动填写被测试的类名,包名以及给测试类起名。
然后选Next,选择你要测试的方法,只把HelloWorld勾上就可以了。点Finish。
自动建成一个叫HelloWorldTest的类,在里面的public void testSay()中写
HelloWorld hi = new HelloWorld();
assertEquals("Hello World!",hi.say());
保存。
Run as... 选Junit Test
测试结果就出来了。
------------------------
不是找不到main函数,而是说要求使用jdk1.5版本以上。要么把你的jdk升级到1.5要么把你的Junit换个低版本的(比如3.x)吧
设置断点是调试程序,不是测试程序
@.@||~
举个例子,干什么要用junit测试?字节IE运行测试不行吗?
一般得软件开发分层进行已经不是什么秘密,假设是一个普通的B/S架构的软件系统,如果我们在测试的任何阶段都采用从顶层(view,通俗的讲就是打开Browser,按照一定的顺序点击,并观察输出结果)自下进行测试,则有以下缺点:1. 难于测试,即使仅仅是想测试简单的business层的功能都必须自顶向下操作整个步骤。2. 一旦发现BUG,问题地点难以定位,因为一般的普通测试属于功能测试,早已经跨越多个层次。3. 不能自动化测试,JUnit编写的脚本可以保证在下次修改了某些代码后重新测试,而你只要按下那个钮,但是如果仅仅使用人力测试,那么非常耗费成本。4. 因为原因3而导致不愿意测试,或将测试向后推延,导致问题发生过晚修改成本极高。
测试的成本高会导致人们懒于测试,而这偏偏与越早发现BUG越好的事实相背。5. 测试覆盖率,人的手工测试可能产生遗漏或偏差,但自动化测试可以弥补不断重复测试导致的偶然遗漏或偏差6. 错误提示和测试报告,通过自动测试工具发现问题可以附件错误提示,以确定错误真正发生的原因,而不用随便依靠感觉猜测。同时依靠其他工具可以生成精美的测试报告,减免收工作业。7. 为了Refactor,如果想重构你的代码,而没有完整的测试脚本,那和走钢丝没啥两样最后为了软件质量,也为了自信的继续编码@.@||~
* @author bie
*
*/
public class BasicTestCase extends TestCase {
public BasicTestCase(String name) {
super(name);
} public static void assertMatchs(String string, String regex)
{
boolean match = string.matches(regex);
assertTrue("Assert matching fail: " + string + "does not match " + regex, match);
}
public static void assertNotEquals(int a, int b)
{
assertTrue("Assert not equals fail: " + a + "does not equals " + b, a != b);
}
public static void assertNotNagitive(int num)
{
assertTrue("Assert not nagitive fail: " + " num = " + num, num >= 0);
}
}================================================package com.lucent.lps.soap.user.test;import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.rmi.RemoteException;import com.lucent.soap.schema.lcm.*;import junit.framework.Test;
import junit.framework.TestSuite;/**
* @author bie
*
*/
public class UserTestCase extends BasicTestCase {
public static com.lucent.qd.lcm_dev10_n1_ext.jboss_net.services.PABWebService.PABWebServiceSoapBindingStub pabBinding = null;
public static com.lucent.qd.lcm_dev10_n1_ext.jboss_net.services.LogonWebService.LogonWebServiceSoapBindingStub logonBinding = null;
public static com.lucent.soap.schema.lcm.SessionIdData sessionId;
public UserTestCase(String name) {
super(name);
try {
if (pabBinding == null)
pabBinding = (com.lucent.qd.lcm_dev10_n1_ext.jboss_net.services.PABWebService.PABWebServiceSoapBindingStub)
new com.lucent.qd.lcm_dev10_n1_ext.jboss_net.services.PABWebService.PABWebServiceServiceLocator().getPABWebService();
pabBinding.setMaintainSession(true);
if (logonBinding == null)
logonBinding = (com.lucent.qd.lcm_dev10_n1_ext.jboss_net.services.LogonWebService.LogonWebServiceSoapBindingStub)
new com.lucent.qd.lcm_dev10_n1_ext.jboss_net.services.LogonWebService.LogonWebServiceServiceLocator().getLogonWebService();
logonBinding.setMaintainSession(true);
}
catch (javax.xml.rpc.ServiceException jre) {
if(jre.getLinkedCause()!=null)
jre.getLinkedCause().printStackTrace();
throw new junit.framework.AssertionFailedError("JAX-RPC ServiceException caught: " + jre);
}
assertNotNull("binding is null", pabBinding);
pabBinding.setTimeout(60000);
}
public String decode(String str, String charset) throws UnsupportedEncodingException
{
if (str == null)
return null;
Charset charSet = Charset.forName(charset);
if (charSet == null) return str;
ByteBuffer bb = ByteBuffer.allocateDirect(str.length() * 2);
byte[] chars = str.getBytes(charset);
for(int i = 0; i < str.length(); i ++)
{
bb.put(i*2, chars[i*2]);
bb.put(i*2+1, chars[i*2+1]);
}
return charSet.decode(bb).toString();
}
public void testLogon() throws RemoteException, UnsupportedEncodingException
{
com.lucent.soap.schema.lcm.LogonResultData value = null;
com.lucent.soap.schema.lcm.LogonIdData logonData = new com.lucent.soap.schema.lcm.LogonIdData();
logonData.setPartitionId("china");
logonData.setUserId("franky1");
logonData.setPassword("87848784");
value = logonBinding.logon(logonData);
//System.out.println(value.getUserData().getFirstName() + ", " + value.getUserData().getLastName());
byte[] chars = value.getUserData().getFirstName().getBytes("UTF-16BE"); String name = new String(chars, "UTF-16BE");
sessionId = value.getSessionId();
System.out.println(name + ", " + sessionId.getSessionId());
// Assert
assertNotNull(value);
assertMatchs(value.getSessionId().getSessionId(), "[0-9]+");
assertNotEquals(0, value.getLogonResult());
}
public void testLogout() throws RemoteException
{
logonBinding.logout(sessionId);
}
/*
public void testClick2Dial() throws RemoteException
{
com.lucent.soap.schema.lcm.CallIdData value = null;
com.lucent.soap.schema.lcm.ClickToDialData click2DialData = new com.lucent.soap.schema.lcm.ClickToDialData();
com.lucent.soap.schema.lcm.PhoneIdData phone = new com.lucent.soap.schema.lcm.PhoneIdData();
phone.setPhoneId("+19745403100");
click2DialData.setPhone(phone);
value = binding.clickToDial(click2DialData);
// Assert
assertNotNull(value);
assertNotNagitive(value.getCallId());
}
public void testGetActiveCalls() throws RemoteException
{
com.lucent.soap.schema.lcmws.ActiveCallListData activeCalls = null;
activeCalls = binding.getActiveCalls();
assertNotNull(activeCalls);
assertNotNull(activeCalls.getCallList());
//assertNotNegitive(activeCalls.getCallList().length);
}
*/
public void testAddContact() throws RemoteException
{
com.lucent.soap.schema.lcm.PABContactData newContact = new com.lucent.soap.schema.lcm.PABContactData();
//newContact.setFirstName("first");
//newContact.setLastName("last");
com.lucent.soap.schema.lcm.PABContactResultData result = pabBinding.addContact(sessionId, newContact);
System.out.println(result.getContactID() + " - " + result.getLastUpdateNum());
}
public void testDelContact() throws RemoteException
{
PABContactIDData contactId = new PABContactIDData();
contactId.setContactID(3);
com.lucent.soap.schema.lcm.PABContactResultData pabContact = pabBinding.delContact(sessionId, contactId);
}
public void testGetPAB() throws RemoteException
{
com.lucent.soap.schema.lcm.UpdateNumber updNum = new com.lucent.soap.schema.lcm.UpdateNumber();
updNum.setUpdateNum(0);
com.lucent.soap.schema.lcm.PABUserData pab = pabBinding.getPAB(sessionId, updNum);
System.out.println("got pab! there are " + pab.getContacts().length + " contacts");
} public static Test suite()
{
TestSuite suite = new TestSuite();
suite.addTest(new UserTestCase("testLogon"));
//suite.addTest(new UserTestCase("testAddContact"));
//suite.addTest(new UserTestCase("testGetPAB"));
//suite.addTest(new UserTestCase("testDelContact"));
//suite.addTest(new UserTestCase("testGetActiveCalls"));
//suite.addTest(new UserTestCase("testClick2Dial"));
suite.addTest(new UserTestCase("testLogout"));
return suite;
}
public static void main(String[] args) throws RemoteException
{
junit.textui.TestRunner.run(UserTestCase.suite());
}
}