当前位置: 首页 > 知识库问答 >
问题:

如何对调用私有方法的公共方法进行单元测试,然后该方法又调用web服务方法

权黎昕
2023-03-14

以下是设置:

 public class ClassToTest{

    public void doSomething(ObjectToWorkOn[] objects){
        doPrivateStuff(objects);
    }

    private void doPrivateStuff(ObjectToWorkOn[] objects){
        List<ObjectToWorkOn> validObjects=new ArrayList<ObjectToWorkOn>();
        for(ObjectToWorkOn obj:objects){
           if(obj.isValid())
           validObjects.add(obj);
        }
        SomeWebService ws=new SomeWebService();
        ws.processObjects(validObjects);
    }

 }

我需要测试公共doSomething方法,以检查是否筛选了invalidObjects。如您所见,它将对象传递给私有的DoprivateStuff方法。该方法过滤掉无效的对象,并将有效的对象发送给web服务方法。该web服务方法不返回任何内容。因此,我不知道是否只有有效的对象被发送到web服务方法。你建议我怎么做才能检验这个案子?我正在使用Mockito框架来模拟对象。

共有1个答案

燕扬
2023-03-14

不能测试此方法的主要原因是,您在类中创建了SomeWebService

要解决这个问题,您应该插入SomeWebService

public class ClassToTest{
    private readonly ISomeWebService someWebService;

    public ClassToTest(ISomeWebService someWebService)
    {
        this.someWebService = someWebService;
    }

    public void doSomething(ObjectToWorkOn[] objects){
        doPrivateStuff(objects);
    }

    private void doPrivateStuff(ObjectToWorkOn[] objects){
        List<ObjectToWorkOn> validObjects=new ArrayList<ObjectToWorkOn>();
        for(ObjectToWorkOn obj:objects){
           if(obj.isValid())
           validObjects.add(obj);
        }

        someWebService.processObjects(validObjects);
    }
}

现在,您可以在测试和验证processObjects方法是否使用正确的参数调用ISOMEWebService中模拟您的ISOMEWebService依赖项

 类似资料:
  • 我需要一些软件测试方面的指导。 我把事情复杂化了,但我太专注了,看不到我做错了什么,也看不到其他做事方式。 我有几个公共方法使用相同的私有方法。 私有方法本身: 必须为其特定角色处理许多场景 假设私有方法需要5个测试来覆盖所有场景,并由6个公共方法使用。 问题 > 然后我是否需要至少5x6个测试? 如何对每个公共方法重复使用私有方法的测试? 有没有关于重构重复测试的示例/文章? 示例 OnStar

  • 在我们的ASP。Net核心应用程序,我们有许多API从服务类调用公共方法。 服务类正在实现一个接口。 每个服务方法(取决于复杂性和需求)可以调用任意数量的内部或私有或辅助方法。 虽然这些内部/私有/或辅助方法中的每一个都单独进行单元测试,但我们如何以这样一种方式测试公共服务方法,即我们不必重复已经在测试内部/私有/辅助方法中花费的代码/精力? e、 我们可以很容易地模拟接口方法,说接口方法需要这些

  • 我陷入了单元测试场景的一个基本问题,并将感谢帮助。 我有一个类,它调用在DB中将标志设置为true。 我的测试: 我被要求测试并检查是否正在使用相关数据调用。 由于返回类型无效,我如何测试它?

  • 我有一个类,它有一个公共方法,它调用另一个私有方法。 通过调用公共方法 并将 设置为 来进行测试。 将更改为package-private并在测试中直接调用它。 然而,我不确定哪种方法更好。

  • 我是单元测试的新手,最近尝试了JUnit测试和Mockito。 我很困惑我该如何测试公共功能。

  • 我不熟悉单元测试。参考google之后,我创建了一个测试类来测试我的控制器,如下所示: 我有以下控制器和服务类: 当我调试单元测试时,控制器中的p对象为null。我的状态是200,但不是预期的JSON响应 我错过了什么?