标签: junit4

即使我期望注释,在 Eclipse 中运行的 JUnit 测试也会返回错误

(这是一个跟进问题一个。)

我在 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)

java eclipse junit unit-testing junit4

1
推荐指数
1
解决办法
1022
查看次数

如何使用junit 4运行scala测试?

我无法使用IDEA运行以下代码

@Test
class CompanyURLTest extends Assert {
  @Test
  def test = assert(false);

}
Run Code Online (Sandbox Code Playgroud)

它运行,但J-Unit表示没有测试运行

unit-testing scala junit4 scala-2.8

1
推荐指数
1
解决办法
5273
查看次数

当我从test.java文件中运行Run时,JUnit测试不会运行

我有一个相当奇怪的问题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测试)

任何想法都将非常感激.

java eclipse junit4

1
推荐指数
1
解决办法
7387
查看次数

JUnit:设置测试类的事务边界

我想在启动任何测试方法之前启动数据库事务,并在运行所有测试结束时回滚所有事务。

怎么办?我应该使用什么注释?

@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)

java junit spring spring-test junit4

1
推荐指数
1
解决办法
1万
查看次数

在Activity.onCreate()上使用Robolectric的NullPointerExcepcion

我正在使用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)

java android nullpointerexception junit4 robolectric

1
推荐指数
1
解决办法
1882
查看次数

无法使用JUnitParams运行PowerMock

我正在尝试使用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)

java junit junit4 powermock junit-rule

1
推荐指数
1
解决办法
3401
查看次数

Espresso如何在不使用R.id.viewid的情况下访问视图,就像我们在robotium中一样?

我正在从机器人切换到浓缩咖啡,我正在使用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)

android junit4 robotium android-testing android-espresso

1
推荐指数
1
解决办法
1913
查看次数

禁用 JUnit 3 类的导入

我只想开发 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”[...]

也许有用的环境信息:

  • 我的构建路径中没有 JUnit 3。
  • 月蚀月神 4.4.1

如何阻止 Eclipse 导入 JUnit 3 类?

我已经阅读了当我的构建路径中有 junit-4.3.1.jar 时,为什么 Eclipse 使用 JUnit 3?,但它已经很老了,可能不再适用于 Luna。另外,我的问题不在于运行测试,而在于实施测试。

eclipse configuration junit4 junit3

1
推荐指数
1
解决办法
720
查看次数

mock on jdbcTemplate抛出编译错误

我试图模拟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错误.

spring mocking jdbctemplate junit4 mockito

1
推荐指数
1
解决办法
1107
查看次数

@ Before / @ BeforeEach继承行为更改JUnit4 / JUnit5

从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()两者的方法,BaseTestClassInheritsFromBase被调用。

将这段代码迁移到JUnit5之后,setUp()不再调用这些方法。我必须在上手动添加@BeforeEach注释InheritsFromBase

产生以下类别:

public class BaseTestClass {

    @BeforeEach
    public void setUp(){
        System.out.println("Base Test Class");
    }
} …
Run Code Online (Sandbox Code Playgroud)

java junit4 junit5

1
推荐指数
1
解决办法
1591
查看次数