【问题标题】:JMockit: show obscure error message about missing invocation 1 to errorJMockit:显示关于缺少调用 1 到错误的模糊错误消息
【发布时间】:2017-05-13 23:48:26
【问题描述】:

我必须测试一个依赖于数据库类的类UserAdmin。我模拟了数据库类来测试UserAdmin 类。数据库类有一个方法isAdmin(),它决定用户是否是管理员。 UserAdmin 类有一个名为 removeUser() 的方法,我收到此错误。如果用户是管理员,removeUser() 方法不允许删除用户 以下是我看到此错误的代码。

@Test
    //testing remove user method of UserAdmin - remove Admin
        public void testremoveUserAdmin() throws SQLException{
            new Expectations() {{
                
                dBConnection.isAdmin("admin");
                times=1;
                result = true;
                
            }};             
         assertEquals(false,userAdmin.removeUser("admin"));

当我输入上面的assertEquals() 时,它给出了一个缺少的调用错误,但是当我在断言中将 false 替换为 true 时,它​​说预期为 true,但它为 false。我不确定为什么会出现此错误。针对类似方法(如isAdmin())运行的类似代码运行良好。请帮忙

【问题讨论】:

  • 如何声明“dBConnection”字段?使用@Mocked@Injectable?如果是第二个,那么这个相同的模拟实例必须是在 UserAdmin#removeUser 方法中使用的那个。
  • 我用过@Mocked DBConnection dBConnection;
  • 当我输入上述 assertequals 时,它给出了一个缺少的调用错误,但是当我在断言中将 false 替换为 true 时,它​​说预期为 true,但它为 false。

标签: java unit-testing junit dependencies jmockit


【解决方案1】:

对我来说很好用:

public class UserAdminTest {
    static class DBConnection { boolean isAdmin(String userName) { return false; } }

    static class UserAdmin {
        boolean removeUser(String userName) {
            DBConnection dbConnection = new DBConnection();

            if (!dbConnection.isAdmin(userName)) {
                // remove user
                return true;
            }

            return false;
        }
    }

    @Tested UserAdmin userAdmin;
    @Mocked DBConnection dBConnection;

    @Test
    public void doesNotRemoveUserWhenAdmin() throws Exception {
        new Expectations() {{ dBConnection.isAdmin("admin"); result = true; }};

        boolean removedIt = userAdmin.removeUser("admin");

        assertFalse(removedIt);
    }
}

【讨论】:

  • 完美!谢谢罗杰里奥。相同的@Test 部分是我写的,它有效。!
【解决方案2】:

在 isAdmin 方法之前应该调用另一个方法。在 isAdmin 方法解决问题之前调用它。

【讨论】:

  • 我有完全相同的问题。你怎么修好它的?我的方法中有调用,所以我把它放在期望中,但看起来我在期望中声明的内容永远不会被调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-29
  • 1970-01-01
  • 1970-01-01
  • 2017-07-20
  • 2016-10-11
  • 1970-01-01
相关资源
最近更新 更多