Struts2单元测试给出错误:类文件javax/servlet/ServletException中非本机或抽象的方法中缺少代码属性
我正在尝试使用文档中描述的方法对Struts2操作运行一个简单的测试。但是,测试类没有实例化,而是提供了以下异常:Struts2单元测试给出错误:类文件javax/servlet/ServletException中非本机或抽象的方法中缺少代码属性,java,unit-testing,maven,struts2,junit,Java,Unit Testing,Maven,Struts2,Junit,我正在尝试使用文档中描述的方法对Struts2操作运行一个简单的测试。但是,测试类没有实例化,而是提供了以下异常: Results : Tests in error: initializationError(net.myorg.myProj.actions.HomeTest): Absent Code attribute in method that is not native or abstract in class file javax/servlet/ServletExceptio
Results :
Tests in error:
initializationError(net.myorg.myProj.actions.HomeTest): Absent Code attribute in method that is not native or abstract in class file javax/servlet/ServletException
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0
下面是我的测试类的代码:
import com.opensymphony.xwork2.ActionProxy;
import org.apache.struts2.StrutsTestCase;
import org.junit.Test;
import static org.junit.Assert.*;
public class HomeTest extends StrutsTestCase
{
@Test
public void testExecute() throws Exception
{
System.out.println("getting proxy");
ActionProxy proxy = getProxy();
System.out.println("got proxy");
String result = proxy.execute();
System.out.println("got result: " + result);
assertEquals("Landing", result, "landing");
}
private ActionProxy getProxy()
{
return getActionProxy("/");
}
}
我做错了什么
编辑:在我的pom.xml中,我有以下内容:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
import com.opensymphony.xwork2.ActionProxy;
import org.apache.struts2.StrutsJUnit4TestCase;
import org.junit.Test;
import static org.junit.Assert.*;
public class HomeTest extends StrutsJUnit4TestCase<Home>
{
@Test
public void testExecute() throws Exception
{
ActionProxy proxy = getActionProxy("/home");
String result = proxy.execute();
assertEquals("Landing", "landing", result);
}
}
爪哇
javaeewebapi
6
假如
我猜这是导致这个问题的原因,即当我只是从IDE中而不是通过web浏览器运行单元测试时,jar没有被正确下载或包含?我怎样才能包含这个jar,这样单元测试才能运行?将以下内容添加到我的pom.xml中修复了这个问题:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0-alpha-1</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2.1-b03</version>
<type>jar</type>
<scope>test</scope>
</dependency>
javax.servlet
servlet api
3.0-α-1
罐子
假如
javax.servlet.jsp
jsp api
2.2.1-b03
罐子
测试
此外,对于JUnit4,我必须按照以下方式重写我的测试:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
import com.opensymphony.xwork2.ActionProxy;
import org.apache.struts2.StrutsJUnit4TestCase;
import org.junit.Test;
import static org.junit.Assert.*;
public class HomeTest extends StrutsJUnit4TestCase<Home>
{
@Test
public void testExecute() throws Exception
{
ActionProxy proxy = getActionProxy("/home");
String result = proxy.execute();
assertEquals("Landing", "landing", result);
}
}
import com.opensymphony.xwork2.ActionProxy;
导入org.apache.struts2.StrutsJUnit4TestCase;
导入org.junit.Test;
导入静态org.junit.Assert.*;
公共类HomeTest扩展了StrutsJUnit4TestCase
{
@试验
public void testExecute()引发异常
{
ActionProxy=getActionProxy(“/home”);
字符串结果=proxy.execute();
资产质量(“着陆”,“着陆”,结果);
}
}
将以下内容添加到my pom.xml中修复了此问题:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0-alpha-1</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2.1-b03</version>
<type>jar</type>
<scope>test</scope>
</dependency>
javax.servlet
servlet api
3.0-α-1
罐子
假如
javax.servlet.jsp
jsp api
2.2.1-b03
罐子
测试
此外,对于JUnit4,我必须按照以下方式重写我的测试:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
import com.opensymphony.xwork2.ActionProxy;
import org.apache.struts2.StrutsJUnit4TestCase;
import org.junit.Test;
import static org.junit.Assert.*;
public class HomeTest extends StrutsJUnit4TestCase<Home>
{
@Test
public void testExecute() throws Exception
{
ActionProxy proxy = getActionProxy("/home");
String result = proxy.execute();
assertEquals("Landing", "landing", result);
}
}
import com.opensymphony.xwork2.ActionProxy;
导入org.apache.struts2.StrutsJUnit4TestCase;
导入org.junit.Test;
导入静态org.junit.Assert.*;
公共类HomeTest扩展了StrutsJUnit4TestCase
{
@试验
public void testExecute()引发异常
{
ActionProxy=getActionProxy(“/home”);
字符串结果=proxy.execute();
资产质量(“着陆”,“着陆”,结果);
}
}