(这是一个跟进问题这一个。)
我在 eclipse 中遇到了 JUnit4 测试的问题。我正在尝试使用 @Test(expected=...) 注释来单元测试异常抛出。问题是当我运行测试时,它们作为错误返回而不是通过,即使我期望抛出异常。
我正在使用 Eclipse 3.4.0 和 JUnit 4.3.1。
这是代码:
要测试的类:
public class IPAddress
{
private byte[] octets;
private IPAddress()
{
octets = new byte[4];
}
public IPAddress(String addr) throws InvalidIPAddressException
{
this();
if(addr == null || !isValid(addr))
throw new InvalidIPAddressException(addr);
String strOctets[] = addr.split("\\.");
for (int i = 0; i < strOctets.length; i++)
octets[i] = Byte.parseByte(strOctets[i]);
}
public static boolean isValid(String addr)
{
String strOctets[] = addr.split("\\.");
if (strOctets.length != 4)
return …Run Code Online (Sandbox Code Playgroud) 我无法使用IDEA运行以下代码
@Test
class CompanyURLTest extends Assert {
@Test
def test = assert(false);
}
Run Code Online (Sandbox Code Playgroud)
它运行,但J-Unit表示没有测试运行
我有一个相当奇怪的问题w/JUnit4和Eclipse.
我有一个Quaternion.java文件和一个关联的QuaternionTest.java.在包浏览器中,我可以右键单击QuaternionTest.java文件和Run-As JUnit下的(C)图标.测试按预期运行.当我右键单击QuaternionTest.java文件并尝试运行测试时,我收到以下错误:
An internal error occurred during: "Launching java".
Path must include project and resource name: /QuaternionTest.java
Run Code Online (Sandbox Code Playgroud)
我是Eclipse和JUnit的新手,所以请原谅我这应该是显而易见的.我试过看了一下这些房产并没有看到任何东西.此外,如果我从构建路径中排除QuaternionTest.java,一切运行正常(当然,除了Quaternion测试)
任何想法都将非常感激.
我想在启动任何测试方法之前启动数据库事务,并在运行所有测试结束时回滚所有事务。
怎么办?我应该使用什么注释?
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/testApplicationContext.xml"})
public class MyTests{
public void setUp(){
//Insert temporary data to Database
}
@Test
public void testOne(){
//Do some DB transactions
}
@Test void testTwo(){
//Do some more DB transactions
}
public void tearDown(){
//Need to rollback all transactions
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Robolectric来测试扩展BaseActivity的Activity(FooActivity),而BaseActivity正在扩展Activity,但我在Activity.onCreate()中得到一个NullPointerException
FooActivity.java扩展了BaseActivity.java
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
}
Run Code Online (Sandbox Code Playgroud)
BaseActivity.java扩展了Activity
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
this.mActivityCreated = true;
mFragmentMgr = getFragmentManager();
this.setContentView(R.layout.main);
}
Run Code Online (Sandbox Code Playgroud)
测试:FooActivityTest
@Before
public void setUp() {
mActivity = new FooActivity();
}
@Test
public void test() {
Intent i = new Intent();
i.putExtra("isTesting", true);
mActivity.setIntent(i);
mActivity.onCreate(null);
}
Run Code Online (Sandbox Code Playgroud)
错误
java.lang.NullPointerException
at android.app.Activity.onCreate(Activity.java:874)
at com.pdi.enjoy.activities.BaseActivity.onCreate(BaseActivity.java:129)
at com.pdi.enjoy.activities.FooActivityTest.onCreate(FooActivity.java:107)
at com.pdi.enjoy.activities.FooActivityTest.test(FooActivity.java:32)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:234)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用PowerMock和JUnitParams,但是我收到了这个奇怪的错误:
com.thoughtworks.xstream.converters.ConversionException: com.lutum.web.ui.controladores.ControladorExibicaoPDF$$EnhancerByMockitoWithCGLIB$$2852e4bb : com.lutum.web.ui.controladores.ControladorExibicaoPDF$$EnhancerByMockitoWithCGLIB$$2852e4bb
---- Debugging information ----
message : com.lutum.web.ui.controladores.ControladorExibicaoPDF$$EnhancerByMockitoWithCGLIB$$2852e4bb
cause-exception : com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message : com.lutum.web.ui.controladores.ControladorExibicaoPDF$$EnhancerByMockitoWithCGLIB$$2852e4bb
class : com.lutum.web.ui.controladores.ControladorExibicaoPDFTest
required-type : com.lutum.web.ui.controladores.ControladorExibicaoPDFTest
converter-type : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
path : /org.powermock.modules.junit4.rule.PowerMockStatement$1/outer-class/fNext/test/outer-class/fTest/sut
line number : 8
class[1] : org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner
class[2] : org.junit.internal.runners.MethodRoadie$2
class[3] : org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner$LastRuleTestExecutorStatement
class[4] : org.powermock.modules.junit4.rule.PowerMockStatement
class[5] : org.powermock.modules.junit4.rule.PowerMockStatement$1
version : null
-------------------------------
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:79)
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:355)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:306)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:234)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:355)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:306)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:234)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
at …Run Code Online (Sandbox Code Playgroud) 我正在从机器人切换到浓缩咖啡,我正在使用apk编写测试,我无法访问代码.在使用solo.getView("view-id")的robotium中,我们可以访问视图,但我不知道如何在浓缩咖啡中进行操作?espresso witId()方法需要R.id.viewid,我无权访问.
public class AaEspressoTest {
private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "com.tri.re.CordActivity";
private static Class<?> launcherActivityClass;
static {
try {
launcherActivityClass = Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
@Rule
public ActivityTestRule<?> mActivityRule = new ActivityTestRule(launcherActivityClass);
@Test public void testHello() throws Exception{
onView(withText("Browse older recordings")).perform(click());
//Id is not accessible shows red
onView(withId(R.id.button)).perform(click());
}
}
Run Code Online (Sandbox Code Playgroud) 我只想开发 JUnit 4 测试。在编写单元测试时,Eclipse 经常从junit.frameworkJUnit 3 中导入类。
这导致了各种问题,例如,当期望异常时,如果它在错误的包中,它就不会捕获它,如下所示:
import static org.junit.Assert.*;
import junit.framework.ComparisonFailure;
[...]
try
{
assertEquals(0, 1);
}
catch(ComparisonFailure cfe)
{
}
Run Code Online (Sandbox Code Playgroud)
很奇怪,如果我Ctrl+ Clickon ComparisonFailure,它说
未找到来源
此类的 JAR 属于容器“JUnit 4”[...]
也许有用的环境信息:
如何阻止 Eclipse 导入 JUnit 3 类?
我已经阅读了当我的构建路径中有 junit-4.3.1.jar 时,为什么 Eclipse 使用 JUnit 3?,但它已经很老了,可能不再适用于 Luna。另外,我的问题不在于运行测试,而在于实施测试。
我试图模拟jdbcTemplate抛出异常.
我试图在JdbcTemplate上对此方法抛出异常
<T> List<T> query(String sql, Object[] args, RowMapper<T> rowMapper)
这就是我所拥有的
@MockBean
JdbcTemplate jdbcTemplate;
Mockito.doThrow(exception).when(jdbcTemplate.query(anyString(), anyList(), any(MyMapper.class)));
Run Code Online (Sandbox Code Playgroud)
我得到编译错误,cannot resolve method.我也试过了
Mockito.doThrow(exception).when(jdbcTemplate.query(anyString(), anyList(), Matchers.<RowMapper<MyMapper>>any()));
Run Code Online (Sandbox Code Playgroud)
但仍然得到相同的错误.
在这里做正确的方法是什么?
编辑
正如其中一个答案中所建议的,我试过了
Mockito.doThrow(exception).when(jdbcTemplate).query(anyString(), anyList(), any(MyMapper.class));
Run Code Online (Sandbox Code Playgroud)
我仍然得到cannot resolve the method错误.
从JUnit4迁移到JUnit5时,我发现JUnit4和JUnit5的行为发生了变化,并想检查该变化是否是JUnit4或JUnit5中的错误,以及如何正确执行。
让我们假设以下结构:
一个基层
public class BaseTestClass {
@Before
public void setUp(){
System.out.println("Base Test Class");
}
}
Run Code Online (Sandbox Code Playgroud)
从该基类继承的另一个类
public class InheritsFromBase extends BaseTestClass {
@Override
public void setUp() {
System.out.println("I inherit from base");
super.setUp();
}
}
Run Code Online (Sandbox Code Playgroud)
和一个实际的测试班
public class ActualTests extends InheritsFromBase {
@Test
public void myTest(){
Assert.assertTrue(true);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我运行myTest()JUnit 4中,则setUp()两者的方法,BaseTestClass和InheritsFromBase被调用。
将这段代码迁移到JUnit5之后,setUp()不再调用这些方法。我必须在上手动添加@BeforeEach注释InheritsFromBase。
产生以下类别:
public class BaseTestClass {
@BeforeEach
public void setUp(){
System.out.println("Base Test Class");
}
} …Run Code Online (Sandbox Code Playgroud) junit4 ×10
java ×6
eclipse ×3
junit ×3
android ×2
spring ×2
unit-testing ×2
jdbctemplate ×1
junit-rule ×1
junit3 ×1
junit5 ×1
mocking ×1
mockito ×1
powermock ×1
robolectric ×1
robotium ×1
scala ×1
scala-2.8 ×1
spring-test ×1