当前位置: 首页 > 知识库问答 >
问题:

如何验证在方法内部启动的方法?

聂煜
2023-03-14

如何验证是否调用了printPreview.createShowReport();。我甚至不能设置mock对象,因为一旦我调用该方法,它就会实例化为null并创建新对象。

     public void previewOrDirectPrint(File file, boolean val) {
                try{
                    printPreview=null;
                    printPreview=new ExamReportPrintUI(this,file);

                }
                catch(Exception e){
                    e.printStackTrace();
                }
                if(!val)
                {
                    printPreview.createShowReport();
                }
                else
                {
                    printPreview.createHideReport();
                    printInitiate();
                    closeReportPreview();

                }

    here is my test case 
    @Test
        public void testpreviewOrDirectPrint()
        {
            File file=new File("/Desktop/config/reportTemplate.html");
            examReportManager.previewOrDirectPrint(file, false);
            assertNotNull(Whitebox.getInternalState(examReportManager, "printPreview"));

    }

Can anyone help me how to access the object or create mock and set to it. I can only verify if the object is mock.

我尝试使用Whitebox.setInternalstate("obj",",mockject)设置。


共有1个答案

司马高韵
2023-03-14

不使用PowerMockito的解决方案如下:

1)添加一个方法,该方法将负责返回一个实例的检查报告PrintUI,并更改测试中的方法,以获得该实例的方式:

    public void previewOrDirectPrint(File file, boolean val) {
       try{
          printPreview=null;
          printPreview= getExamReportInstance(this,file);

       }
       ...
     }

     ExamReportPrintUI getExamReportInstance(ExamReportManager e, File f){
         return new ExamReportPrintUI(e,f);
     }

2) 监视管理器并模拟getExamReportInstance方法以返回所需的模拟:

    @Test
    public void testpreviewOrDirectPrint()
    {
         ExamReportManager spyManager = Mockito.spy(examReportManager);

        doReturn(examReportPrintUIMock).when(spyManager).getExamReportInstance(Mockito.any(ExamReportManager.class), Mockito.any(File.class));

        File file=new File("/Desktop/config/reportTemplate.html");
        examReportManager.previewOrDirectPrint(file, false);
        assertNotNull(Whitebox.getInternalState(examReportManager,printPreview"));

    }

现在,您可以控制该类的实例,并且可以注入配置的mock。

用PowerMockito

  @RunWith(PowerMockRunner.class)
  @PrepareForTest(ExamReportPrintUI.class)
  public ExamReportManagerTest{

    @Mock
    ExamReportPrintUI examReportPrintUIMock;

    @Test
    public void testpreviewOrDirectPrint()
    {
        PowerMockito.whenNew(examReportPrintUI.class)
         .withArguments(Mockito.any(ExamReportManager.class), Mockito.any(File.class))
         .thenReturn(examReportPrintUIMock);

        File file=new File("/Desktop/config/reportTemplate.html");
        examReportManager.previewOrDirectPrint(file, false);
        assertNotNull(Whitebox.getInternalState(examReportManager, "printPreview"));

    }

 }
 类似资料:
  • 问题内容: 我正在尝试装饰类中的方法,但是python抛出错误。我的课看起来像这样: : Python抛出以下错误 我要去哪里玩? 问题答案: Python自动将类实例作为参考传递。(在所有类方法中都可以看到的参数)。 您可以这样做:

  • 问题内容: 我是Mockito的新手。 给定下面的类,如何在调用后使用Mockito验证一次foo被调用的对象呢? 我想打以下电话, 的模拟实例在哪里? 问题答案: 如果注入Bar实例,或用于创建Bar实例的工厂(或其他483种方法之一),则你将具有执行测试所需的访问权限。 工厂示例: 给定一个这样的Foo类: 在你的测试方法中,你可以像这样注入BarFactory: 奖励:这是TDD如何推动代码

  • 我有一个正在测试的类,其中包含一个具有内部匿名类的方法。匿名类中的一个方法调用了被测试类中的一个方法,但Mockito似乎没有意识到这一点。 我的测试代码: 出于某种我似乎无法弄清楚的原因,Mockito无法检测到正在调用outerMethod(),尽管我已经通过在调试器中逐行手动验证。我还验证了对依赖对象的调用返回具有正确内容的正确可观察对象,并且确实调用了on完成()和outerMethod(

  • 问题内容: 如何在method内部创建方法?当我创建其显示错误时: 令牌无效@上的语法错误 如果不能在方法内部创建方法,那么请告诉我如何在方法外部创建方法,并从方法中传递方法。 问题答案: *请注意,应使用没有不等号的实际类型(例如“ int”和“ short”)替换此类标记。

  • 本文向大家介绍Yii2 如何在modules中添加验证码的方法,包括了Yii2 如何在modules中添加验证码的方法的使用技巧和注意事项,需要的朋友参考一下 最近玩了下Yii2的验证码部分,正常的逻辑都可以走通的,网上的例子也是没有问题的,关键有问题的部分是在module中使用的时候,分享给大家,往下看之前可以去看看正常情况下是如何使用的。 controller部分的代码,这里的跟网上的都类似