gpt4 book ai didi

java - 执行单个测试时 Eclipse 和 JUNIT4 的初始化错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:52:00 24 4
gpt4 key购买 nike

我的测试类是这个:

    /**
* The Class TestAddSubscriber.
*/
@RunWith(LabelledParameterized.class)
public class TestAddSubscriber extends AbstractTestSubscriber {

/**
* Instantiates a new test add subscriber.
*
* @param label
* the label
* @param apiKey
* the api key
* @param userKey
* the user key
* @param customerId
* the customer id
*/
public TestAddSubscriber(String label, String apiKey, String userKey,
int customerId) {
super(label, apiKey, userKey, customerId);
}

/**
* @see com.contactlab.api.test.AbstractTest#setUp()
*/
@Override
@Before
public void setUp() throws Exception {
super.setUp();
}

/**
* @see com.contactlab.api.test.AbstractTest#tearDown()
*/
@Override
@After
public void tearDown() throws Exception {
super.tearDown();
}

/**
* Generated data.
*
* @return the collection
*/
@Parameters
public static Collection<Object[]> generatedData() {
return DataProvider.generatedCorrectSubscriberData();
}

/**
* Test add subscriber with internal pk id case sensitive.
*
* @outcome: success
* @expected: success
* @obtained: success
*/
@Test
public void testAddSubscriberWithInternalPkIdCaseSensitive() {

/** this is the test **/

}

/**
* other tests
**/
}

如果我执行测试套件我没有问题但是如果只突出显示其中一个并运行它我有 Unrooted Tests -> InitializationError

该类使用Parameterized

异常(exception)情况是:

TestAddSubscriber.testAddSubscriberWithInternalPkIdCaseSensitive
Unrooted Tests
initializationError(org.junit.runner.manipulation.Filter)
java.lang.Exception: No tests found matching Method testAddSubscriberWithInternalPkIdCaseSensitive(com.contactlab.api.test.subscriber.TestAddSubscriber) from org.junit.internal.requests.ClassRequest@18872380
at org.junit.internal.requests.FilterRequest.getRunner(FilterRequest.java:37)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:33)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestMethodReference.<init>(JUnit4TestMethodReference.java:25)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:54)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

我做错了什么吗?

最佳答案

您可以通过扩展参数化覆盖 org.junit.runners.ParentRunner#filter 来解决问题

public class IDECompatibleParameterized extends Parameterized {

public void filter(Filter filter) throws NoTestsRemainException {
super.filter(new FilterDecorator(filter));
}

/**
* Running single test in case of parameterized test causes issue as explained in
* http://youtrack.jetbrains.com/issue/IDEA-65966
*
* As a workaround we wrap the original filter and then pass it a wrapped description
* which removes the parameter part (See deparametrizedName)
*/
private static class FilterDecorator extends Filter {
private final Filter delegate;

private FilterDecorator(Filter delegate) {
this.delegate = delegate;
}

@Override
public boolean shouldRun(Description description) {
return delegate.shouldRun(wrap(description));
}

@Override
public String describe() {
return delegate.describe();
}
}

private static Description wrap(Description description) {
String name = description.getDisplayName();
String fixedName = deparametrizedName(name);
Description clonedDescription =
Description.createSuiteDescription(fixedName,description.getAnnotations().toArray(new Annotation[0]));
for(Description child : description.getChildren()){
clonedDescription.addChild(wrap(child));
}
return clonedDescription;
}

private static String deparametrizedName(String name) {
//Each parameter is named as [0], [1] etc
if(name.startsWith("[")){
return name;
}

//Convert methodName[index](className) to
//methodName(className)
int indexOfOpenBracket = name.indexOf('[');
int indexOfCloseBracket = name.indexOf(']')+1;
return name.substring(0,indexOfOpenBracket).concat(name.substring(indexOfCloseBracket));
}
}

另一种方法是更改​​ Launch 配置中的方法名称,使其参数名称类似于 testAddSubscriberWithInternalPkIdCaseSensitive[0]

关于java - 执行单个测试时 Eclipse 和 JUNIT4 的初始化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12798079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com