- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个定义合约的接口(interface)(即存储库
),但实现很少。接口(interface)中的每个方法代表一个功能,我想在其套件测试类中测试每个功能。
让我们假设一个 UserRepository
接口(interface)如下:
public interface UserRepository {
Set<User> search(String query);
Set<User> findBySomethingSpecific(String criteria1, Integer criteria2);
}
目前,为了确保运行相同的测试用例,我创建了一个抽象测试类,并且我的每个实现都有一个扩展抽象测试类的测试类。
public abstract UserRepositoryTest {
private UserRepository userRepository;
@Before
public void setUp() {
userRepository = createUserRepository();
}
@Test public void aTestForSearch() { ... }
@Test public void anotherTestForSearch() { ... }
@Test public void aTestForSomethingSpecific() { ... }
@Test public void anotherTestForSomethingSpecific() { ... }
protected abstract UserRepository createUserRepository();
}
//------------------------
public class UserRepositoryImplementationTest extends UserRepositoryTest {
@Override
protected UserRepository createUserRepository() {
return new UserRepositoryImplementation();
}
}
我想找到一种方法将这个抽象测试类划分为一组小测试,因为测试类很快就会不堪重负。我查看了测试套件,但我不明白如何通过注入(inject)不同的实现来创建套件测试类。
另一方面,我发现了这个question ,但我的一些存储库在创建时需要一些逻辑(例如,用于 SQL 实现的 ConnectionPool
)。我目前使用反模式 ServiceLocator
和不同的 Context
类来处理创建,但这是静态
。这就是为什么我采用了通过实现来测试类的方法,这样我就可以创建上下文并随后注入(inject)它。
最佳答案
Whit Junit 4 你可以创建一个像这样的套件:
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
TestFeatureLogin.class,
TestFeatureLogout.class,
TestFeatureNavigate.class,
TestFeatureUpdate.class
})
/**
*
* This suite will execute TestFeatureLogin,TestFeatureLogout,TestFeatureNavigate and TestFeatureUpdate one after the over.
*
* @Before, @After and @Test are no possible of executing in this class.
* @BeforeClas and @AfterClass are allowed only.
*
* */
public class FeatureTestSuite {
// the class remains empty of test,although it is possible set up a before class and after class annotations.
// used only as a holder for the above annotations
@BeforeClass
static public void beforeClass(){
System.out.println(FeatureTestSuite.class.toString() + " BeforeClass Method");
}
@AfterClass
static public void AfterClass(){
System.out.println(FeatureTestSuite.class.toString() + " AfterClass Method");
}
}
完整的示例可以在 here 找到
您必须考虑的另一件事是 @Test 不是抽象类中单元测试的良好实践。如果您想测试您的实现,请创建扩展抽象类的测试类。
关于java - 使用套件进行 JUnit 契约(Contract)测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37441827/
我正在尝试构建某种形式的动态 Corda 合约,该合约具有一个可以保存独立合约列表和这些合约的独立状态的状态。 为了揭开这个概念的神秘面纱,请将“动态 Corda 合约”视为一个抽象类,它具有 Lis
怀念Collections.unmodifiableMap(),我一直在实现基于this discussion 的只读IDictionary 包装器,我的单元测试很快就遇到了问题: Assert.Ar
在消费者测试结束时我需要执行两个步骤: 完成模拟服务器 将协议(protocol)发布给经纪人。 一开始我是先发布再定稿,像这样: var opts = { //broker info } pac
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 3 年前。 Improve
您好, WCF 中数据/服务契约(Contract)的默认命名空间是 "http://tempuri.org/" .通过设置 ServiceContract.Namespace和 ServiceBeh
Using Attachments页面状态: Attachments are ZIP/JAR files referenced from a transaction by hash, but not
说我有一个方法 public void PrintStuff(string stuff, Color color, PageDimensions dimensions) { Assert.I
Mortgage.new({ from: ownerAccount, gas: defaultGas }).then( function(loanInstance) { loa
有很多问题询问是否混合异步和同步代码。 大多数答案都说为异步方法公开同步包装器和为同步方法公开异步包装器是个坏主意。 但是,没有一个答案解决您必须混合使用异步和同步代码的特定场景,以及如何避免由此产生
我是来自 PHP/Larvel、Ruby/Rails 和 Python/Django 的 Spring 新手。来自这些框架,我习惯于只看到模型(Entity/Dao?),其他一切都由 Framewor
我正在尝试为一些广泛使用的接口(interface)编写契约(Contract)测试: 沿着: public abstract class MyInterfaceContractTest extend
这是来自自定义 Microsoft .NET 运行时实现的代码,我有以下问题: public static string ToBase64String(byte[] inArray, int
我正在用遗留代码重构一个巨大的 C 库,其中许多函数在参数列表上都有指针。我还为新创建的函数编写单元测试以确保我没有破坏任何东西(除了来自单元测试的所有好东西,这是我的主要动机)。我也不允许更改库的
我的类有一个内部属性返回 List ,并且我想使用静态检查来帮助我不在我的程序集中做任何愚蠢的事情,并可能向该集合添加 null。 我在 foreach 的循环变量上收到这个静态警告在属性(prope
我在这个问题上花了几个小时...这是我的代码: public static IEnumerable Generate(this Func generator) where T : class {
我有兴趣了解更多关于contract-first 网络服务的信息,包括如何将它们组合在一起。 谁能推荐有用的资源来解释所需的方面/组件以及如何生成它们? 除了 Spring 的契约优先 Web 服务之
我刚刚将我的联系方式、银行和税务详细信息上传到 iTunes Connect;这个处理通常需要多长时间?我只能找到 5 年以上的信息。 最佳答案 契约(Contract)审核过程大约需要 20 分钟。
假设我们有一个类 Student使用以下构造函数: /** Initializes a student instance. * @param matrNr matriculation numb
使用 CXF 创建契约(Contract)最后的 Web 服务似乎是快速创建基于 SOAP 或 REST 的 Web 服务的有效方式。但是,我不清楚/不确定以下内容,非常感谢您提供见解/反馈: con
引自 Effective Java - Second Edition by Joshua Bloch For floating-point fields, use Double.compare or
我是一名优秀的程序员,十分优秀!