对象创建嘲弄mockito

时间:2018-05-03 13:13:27

标签: java android unit-testing mocking mockito

我有一个班级顶部和底部。我想单元测试创​​建底部对象的atom类。

<?php if(isset($_SESSION['flash'])): ?>
    <?php foreach ($_SESSION['flash'] as $type => $message): ?>
        <div class="alert alert-<?= $type; ?>">
            <?= $message; ?>
        </div>
    <?php enforeach; ?>
    <?php unset($_SESSION['flash']); ?>
<?php endif; ?>

单元测试类:

public class top {

  publiv top() {
     bottom b = new bottom("value");
  }
}

在测试中为顶级类创建对象时,它将为底层类创建一个对象。

在这里,我想模拟底层对象的创建。任何人都可以帮我解决这个问题。

2 个答案:

答案 0 :(得分:0)

为此,您应该考虑将底部对象作为参数传递。当对象依赖于该对象时,将对象作为参数传递始终是一种好习惯。

public class Top {
   private Bottom bottom;

   public Top(Bottom bottom) {
      this.bottom = bottom
   }
}

public class TopTest {
   @Test
   public void test(){ 
      Bottom bottom = mock(Bottom.class);
      Top top = new Top(bottom);
   }
}

答案 1 :(得分:0)

您需要移动逻辑创建底部实例。要么采用可重写的方法,例如:

public class top {

  public top() {
     bottom b = new bottom("value");
  }

  protected bottom createBottom() {
     return new bottom("value");
  }
}

然后你可以在测试中覆盖它:

public class topTest {
   @Test
   public void test(){ 
     top a = new top() {
            protected bottom createBottom() {
               return Mockito.mock(bottom.class);
             }   
             };
   }
}

或者您创建一个BottomCreator类,在构建时将其传递给Top,并在测试时使用模拟/假冒版本。

public class top {

      private final BottomCreator bottomCreator;

      public top(BottomCreator creator) {
           this.bottomCreator = creator;
      }

      public top() {
         bottom b = bottomCreator.newBottom();
      }

    }