模拟/存根与Java中的集成测试
我在端点上使用rest-assured进行集成测试。其中一个端点依赖于另一个资源(它有条件地调用另一个API)。有没有一种方法可以让我删除API调用,这样我就可以为这种情况编写测试?假设您的代码通过http在内部调用endpointB,您可以使用or来存根该API。因此,当您的代码在内部调用另一个API时,它将命中这些存根,这将始终返回一个虚拟响应。希望这有帮助模拟/存根与Java中的集成测试,java,mocking,integration-testing,stubbing,rest-assured,Java,Mocking,Integration Testing,Stubbing,Rest Assured,我在端点上使用rest-assured进行集成测试。其中一个端点依赖于另一个资源(它有条件地调用另一个API)。有没有一种方法可以让我删除API调用,这样我就可以为这种情况编写测试?假设您的代码通过http在内部调用endpointB,您可以使用or来存根该API。因此,当您的代码在内部调用另一个API时,它将命中这些存根,这将始终返回一个虚拟响应。希望这有帮助 interface IDataProvider { string RetrieveData(); } class Standard
interface IDataProvider {
string RetrieveData();
}
class StandardDataProvider : IDataProvider {
public string RetrieveData(){
// call to API
}
}
class Program {
private IDataProvider _dataProvider;
public Program(IDataProvider provider = null) {
_dataProvider = provider ?? new StandardProvider();
}
public void MethodToTest(){
var data = _dataProvider.RetrieveData();
// do your thing
}
}
在测试中,您可以通过创建自己的IDataProvider
对象并处理其数据来模拟数据
class TestDataProvider : IDataProvider {
public string RetrieveData(){
return "my own data";
}
}
class Test {
[TestMethod]
public void TestProgram(){
var obj = new Program(new TestDataProvider);
var result = obj.MethodToTest();
// asserts
}
}
如果您将数据的检索与数据的操作分开,并将其外包给具有实现的接口,您可以使用构造函数或setter注入来注入您自己的测试数据。@Jeroenvanevel您能提供一个示例吗?我已经发布了一个示例作为答案。它们都需要在运行JUnit测试时运行另一个进程,对吗?是的,您必须在运行rest测试用例之前启动它们。因为rest没有mock或stub(据我所知),所以我们必须这样做。