【问题标题】:Stub only one private static method in a class仅存根一个类中的一个私有静态方法
【发布时间】:2019-07-23 22:26:18
【问题描述】:

我有一门课,我正在单元测试。如下所示:

 public class classToUT {
         public static Event getEvent(String id) {
                return getEvent(id, null);
         }
         private static Event getEvent(String id, String name) {
              //do something
              logEvent(id, name);
              return event;
         }
         private static void logEvent(String id, string name) {
             // do some logging
         }
    }

我想避免在logEvent 中调用外部实用程序方法。基本上,我只想删除logEvent,但在我的单元测试中调用所有其他方法。如何仅存根这一种方法?

public void UTClass {
    @Test
    public void testGetEvent() {
         assertNotNull(event, classToUt.getEvent(1)); //should not call logEvent 
        //but call real method for getEvent(1) and getEvent(1, null)  
    }
}

【问题讨论】:

标签: java unit-testing testing mockito powermock


【解决方案1】:

试试下面的...

@RunWith(PowerMockRunner.class)
@PrepareForTest(PowerTest.ClassToUT.class)
public class PowerTest {

    public static class ClassToUT {

        public static String getEvent(String id) {
            return getEvent(id, null);
        }

        private static String getEvent(String id, String name) {
            // do something
            logEvent(id, name);
            return "s";
        }

        private static void logEvent(String id, String name) {
            throw new RuntimeException();
        }
    }

    @Test
    public void testGetEvent() throws Exception {

        PowerMockito.spy(ClassToUT.class);
        PowerMockito.doNothing().when(ClassToUT.class, "logEvent", any(), any());

        Assert.assertEquals("s", ClassToUT.getEvent("xyz"));
    }
}

【讨论】:

  • 这里的黄金物品
猜你喜欢
  • 2016-06-28
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
  • 2022-11-20
  • 2013-08-25
  • 2011-08-22
  • 1970-01-01
  • 2017-05-23
相关资源
最近更新 更多