当前位置: 首页 > 面试题库 >

模拟课程中的模拟课程

柴俊捷
2023-03-14
问题内容

我该如何与正在测试的班级中的Mockito其他班级进行模拟?

例如:

MyClass.java

class MyClass {
    public boolean performAnything() {
        AnythingPerformerClass clazz = new AnythingPerformerClass();
        return clazz.doSomething();        
    }
}

任何东西PerformerClass.java

class AnythingPerformerClass {
    public boolean doSomething() {
        //very very complex logic
        return result;
    }
}

并测试:

@Test
public void testPerformAnything() throws Exception {
    MyClass clazz = new MyClass();
    Assert.assertTrue(clazz.performAnything());
}

AnythingPerformerClass是否可以欺骗以排除不必要的逻辑AnythingPerformerClass?我可以重写doSomething()方法来简单地返回true还是false

为什么指定Mockito,因为在Robolectric进行Android测试时需要它。


问题答案:

您可以重构,MyClass以便它使用依赖注入。不用让它创建AnythingPerformerClass实例,您可以将类的实例传递给MyClass类似这样的构造函数:

class MyClass {

   private final AnythingPerformerClass clazz;

   MyClass(AnythingPerformerClass clazz) {
      this.clazz = clazz;
   }

   public boolean performAnything() {         
     return clazz.doSomething();        
   }
}

然后,您可以在单元测试中传递模拟实现

@Test
public void testPerformAnything() throws Exception {
   AnythingPerformerClass mockedPerformer = Mockito.mock(AnythingPerformerClass.class);
   MyClass clazz = new MyClass(mockedPerformer);
   ...
}

或者,如果您的AnythingPerformerClass包含状态,则可以将a传递AnythingPerformerClassBuilder给构造函数。



 类似资料:
  • 问题内容: 我最近读到,使类成为单例使不可能模拟该类的对象,这使得测试其客户端变得困难。我无法立即理解其根本原因。有人可以解释一下什么使得模拟单例课程成为不可能吗?另外,使类单例还有其他问题吗? 问题答案: 当然,我可以写一些类似 不使用单例的 东西 ,它们很邪恶,使用Guice / Spring /什么都可以, 但是首先,这不能回答您的问题,其次,当您使用遗留代码 来 处理单例时,例。 因此,我

  • 我想有一个数据库,其中包含每个学生,他/她正在参加的课程,以及他/她对每个学生的成绩。 我目前的模式是: 学生: first_name last_name student_id 课程: course_name course_id 等级 student_id course_id 问题是我不能加入学生和课程。当然可以添加student_id作为外键吗?最好的模型是什么?

  • 问题内容: 我上了最后一堂课,像这样: 我在其他这样的班级中使用这个班级: 在我的JUnit测试类中,Seasons.java我想模拟RainOnTrees该类。我该如何使用Mockito做到这一点? 问题答案: 仅在Mockito v2中可以模拟最终/静态类/方法。 将此添加到你的gradle文件中: 使用Mockito常见问题解答中的 Mockito v1,这是不可能的: `What are

  • 我有最后一节课,大概是这样的: 我在其他类中使用这个类,如下所示: 在的JUnit测试类中,我想模拟类。我怎么能用莫基托做到这一点?

  • 问题内容: 我有一个用3个模块在Kotlin中编写的Android Clean Architecture项目 : 数据(Android库) domaine(Java库) 演示文稿(Android应用程序) 这3个模块均具有用junit编写的单元测试 。但是对于Kotlin,默认情况下每个课程都是最终课程。我很快遇到了一个问题: 如何用模拟方法模拟最终课程 现在可以用Mockito 2 通过创建包含

  • 问题内容: 我在Python中使用时遇到了一些困难: 测试实际上返回正确的值,但它是Mock对象,不是。您如何在Python库中模拟属性? 问题答案: 您需要使用和: 这意味着:调用时,在该调用的返回值上,为属性设置a以返回value 。