所以可能是,我在Java中有一个基本的误解。让我们假设我有一个方法,它获取一个Object作为参数。它甚至是有意义的还是可以测试,当我传递null时会发生什么?:
@Test(expected = NullPointerException.class)
public void test_nullPointer() {
doThrow(new NullPointerException()).when(myService).getSomeInformation(null);
classUnderTest.doSomething(null);
verify(myService).getSomeInformation(isNull(myObject.class));
}
当然这不起作用。但这是我目前正在努力实现的,当然,这样做甚至是有意义的。
编辑:当我调用classUnderTest.doSomething(myObject obj)时,调用myService.getSomeInformation(myObject obj)。因此它将obj传递给myService以返回基于obj的内容。
问题是,我只想确保,如果任何其他类调用classUnderTest.doSomething(null),则抛出一个未捕获的NullPointerException。这是否是必要的问题,测试这种行为。如果是的话,如何实现它。
答案 0 :(得分:0)
这有效(假设$rootScope.cart = {};
var democart= angular.copy($rootScope.cart);
var cartCopy = democart;
$rootScope.cart.test = 4;
console.log('$rootScope.cart', $rootScope.cart); // { test: 4 }
console.log('cartCopy', cartCopy); // {}
console.log('democart', democart); // {}
是模拟的)......
someService
...但是如果你开始测试你的NPE,你应该首先处理它而不是简单地抛弃NPE(然后测试更好的行为)。
有意义吗?老实说,我对此表示怀疑。如果您没有足够的检查,NPE就会发生。我个人不认为NPE应该被抛出,只是因为我搞砸了其他检查而发生的事情。 (公共)方法开头的IllegalArgumentException可能比代码深处的NPE更好(并且至少更清晰)。