作者:李冰或李冰圆_862 | 来源:互联网 | 2023-08-12 20:12
eclEmma的亮点没有显示任何遗漏的代码,但是报告显示了24条中有12条遗漏的指令。我很确定这是由于Coverage::doNotCall
而引起的,但不确定其在寻找什么。我几乎可以肯定这不是构造函数,因为我有其他类似的类具有100%的覆盖率。有什么想法吗?
import java.util.function.BiConsumer;
import java.util.function.Supplier;
import java.util.stream.Stream;
public class Coverage {
private Coverage() {}
public static R collect(Stream stream,Supplier supplier,BiConsumer accumulator) {
return stream.sequential().collect(supplier,accumulator,Coverage::doNotCall);
}
static void doNotCall(@SuppressWarnings("unused") Object...args) {
throw new IllegalStateException();
}
}
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.lang.reflect.Constructor;
import java.lang.reflect.invocationTargetException;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
import org.junit.Test;
public class CoverageTest {
@Test
public void testCollect() {
assertThat(Coverage.collect(Stream.of(1,2,3),ArrayList::new,List::add),is(List.of(1,3)));
try {
Coverage.doNotCall();
fail("Exception expected");
} catch (Exception e) {}
}
@Test
public void testConstructorIsPrivate() {
assertPrivateConstructor(Coverage.class);
}
public static void assertPrivateConstructor(Class> cls) {
try {
Constructor> cOnstructor= cls.getDeclaredConstructor();
assertTrue("Constructor is not private",Modifier.isPrivate(constructor.getModifiers()));
constructor.setaccessible(true);
constructor.newInstance();
constructor.setaccessible(false);
} catch (NoSuchMethodException | invocationTargetException | IllegalaccessException
| InstantiationException e) {
throw new AssertionError(e);
}
}
}
(我没有使用PowerMock.Java SE-12,eclipse 2019-09 R(4.13.0),eclEmma 3.1.2.201903112331,JUnit 4.12)