【问题标题】:Mock / stub with integration testing in Java模拟/存根与 Java 中的集成测试
【发布时间】:2013-09-25 08:18:40
【问题描述】:

我正在使用 rest-assured 对我的端点进行集成测试。其中一个端点依赖于另一个资源(它有条件地调用另一个 API)。有没有办法让我停止 API 调用,以便为这种情况编写测试?

【问题讨论】:

  • 如果你把数据的获取和操作分开,外包给一个接口实现,你可以使用constructor或者setter注入来注入你自己的testdata。
  • @JeroenVannevel 你能举个例子吗?
  • 我已经发布了一个示例作为答案。

标签: java mocking integration-testing stubbing rest-assured


【解决方案1】:
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
 }
}

【讨论】:

    【解决方案2】:

    假设您的代码通过 http 在内部调用端点 B,您可以使用 https://github.com/katta/fakeresthttps://stubby4j.com 存根该 api。因此,当您的代码在内部调用另一个 api 时,它将命中这些存根,这些存根将返回总是一个虚拟的响应。希望这会有所帮助。

    【讨论】:

    • 它们都需要在运行 JUnit 测试时运行另一个进程,对吧?
    • 是的,您必须在运行您的放心测试用例之前启动它们。由于rest保证没有模拟或存根(据我所知),我们必须这样做。
    猜你喜欢
    • 2010-12-22
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 2022-08-11
    • 2011-03-15
    相关资源
    最近更新 更多