考虑一个例子(在java中编译)
public abstract interface Interface {
public void interfacing();
public abstract boolean interfacing(boolean really);
}
Run Code Online (Sandbox Code Playgroud)
为什么接口被"声明"抽象是必要的?是否有适用于抽象接口的其他规则?
最后:如果abstract已经过时,为什么它包含在Java中?抽象界面有历史吗?
我有一个接口,List其实现包括单链接列表,双重,循环等.我为Singly编写的单元测试应该对大多数双重以及循环和接口的任何其他新实现都有好处.因此,JUnit不是为每个实现重复单元测试,而是提供内置的东西,让我有一个JUnit测试并针对不同的实现运行它?
使用JUnit参数化测试我可以提供不同的实现,如Singly,doublely,circular等,但是对于每个实现,相同的对象用于执行类中的所有测试.
考虑以下具体场景:有人创建了许多测试来完全测试类实现Collection<E>必须遵守的功能。那么如何可能使用该测试类(以某种方式)来测试 的具体实现Collection<E>?
举例:
public class CollectionTest {
//lots of tests here
}
public class ACollection<E> implements Collection<E> {
//implementation and custom methods
}
public class BCollection<E> implements Collection<E> {
//implementation and other custom methods
}
Run Code Online (Sandbox Code Playgroud)
那么我应该如何编写测试类,以便最少的代码重复发生?
public class ACollectionTest {
//tests for Collection<E>, preferably not duplicated
//tests for custom methods
}
public class BCollectionTest {
//tests for Collection<E>, preferably not duplicated
//tests for other custom methods
}
Run Code Online (Sandbox Code Playgroud)
换句话说,是否可以“扩展 CollectionTest”,但是否可以在一个ACollectionTest或BCollectionTest(或更多)实例上运行其测试?请注意,这些方法仍然可以访问,一旦你使用ACollection<E>的Collection<E> …
有没有办法在JUnit Jupiter(Junit5)中进行参数化测试?
@RunWith(Parameterized.class)
Run Code Online (Sandbox Code Playgroud)
背景:
我经历了如何编写接口的junit测试?并希望实施测试用例在这里找到答案使用JUnit5.但是在Jupiter包中找不到相同的类/ es.
尝试:
进一步寻找替代品,我发现Extensions将替换@RunWith,如迁移提示中所述
@RunWith不再存在; 被@ExtendWith取代.
我尝试CustomExtension在这里定义一个提供的示例--MockitoExtension但是无法成功使用参数化类的实例.
期待有关如何使用参数化实现类的实例测试接口的建议JUnit5.
通常,我的应用程序中只有一个接口的实现,并且在为接口编写测试时总是使用第一个实现。假设我有一个 interfaceDestroyer和一个 implementation DestroyerImpl。然后我会在测试中使用那个类:
class DestroyerTest
{
private Destroyer destroyer = new DestroyerImpl();
@Test
public void test() { ... }
}
Run Code Online (Sandbox Code Playgroud)
然后通过在接口测试中实例化该类进行隐式测试。如果我编写另一个实现类,EpicDestroyer我现在觉得我也必须对其进行测试。
那么,我是否编写了两个测试类DestroyerImplTest并且EpicDestroyerTest都Destroyer用不同的实现测试相同的接口?那不会是多余的吗?我可以通过参数化在同一个测试套件中测试每个实现。这是这样做的方法吗?