Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 识别';有效';服务外观的单元测试_Unit Testing_Testing_Integration Testing - Fatal编程技术网

Unit testing 识别';有效';服务外观的单元测试

Unit testing 识别';有效';服务外观的单元测试,unit-testing,testing,integration-testing,Unit Testing,Testing,Integration Testing,考虑到以下(基本)服务facade类,我想要一些关于单元测试应该和值得编写的内容的建议和指导。我使用MEF进行依赖项注入,使用AutoMapper将我的数据契约映射到域对象,反之亦然 public sealed class MyServiceFacade { [ImportingConstructor()] public MyServiceFacade(IDependency dependency, IMappingEngin

考虑到以下(基本)服务facade类,我想要一些关于单元测试应该和值得编写的内容的建议和指导。我使用MEF进行依赖项注入,使用AutoMapper将我的数据契约映射到域对象,反之亦然

public sealed class MyServiceFacade
{
    [ImportingConstructor()]
    public MyServiceFacade(IDependency dependency,
                           IMappingEngine mappingEngine)
    {
        if (dependency == null)
            throw new ArgumentNullException("dependency");

        if (mappingEngine == null)
            throw new ArgumentNullException("mappingEngine");

        Dependency = dependency;
        MappingEngine = mappingEngine;
    }

    public IDependency Dependency { get; private set; }
    public IMappingEngine MappingEngine { get; private set; }

    public ResponseContract TheMethod(RequestContract requestContract)
    {
        // Verify parameters
        if (requestContract == null)
            throw new ArgumentNullException(requestContract);

        // Translate parameter values
        var request = MappingEngine.DynamicMap<Request>(requestContract);

        // Delegate to the domain layer
        var response = Dependency.DoSomethingWith(request);

        // Translate the response
        var responseContract = MappingEngine.DynamicMap<ResponseContract>(response);

        // Return the response
        return responseContract;
    }
}
公共密封类MyServiceFacade
{
[导入构造函数()]
公共MyServiceFacade(IDependency dependency,
IMappingEngine映射引擎)
{
if(依赖项==null)
抛出新的ArgumentNullException(“依赖项”);
if(mappingEngine==null)
抛出新的ArgumentNullException(“mappingEngine”);
依赖=依赖;
MappingEngine=MappingEngine;
}
公共IDependency依赖项{get;private set;}
公共IMappingEngine映射引擎{get;private set;}
公共响应契约方法(请求契约请求契约)
{
//验证参数
if(requestContract==null)
抛出新的ArgumentNullException(requestContract);
//转换参数值
var request=MappingEngine.DynamicMap(requestContract);
//委托给域层
var response=Dependency.DoSomethingWith(请求);
//翻译回应
var responseContract=MappingEngine.DynamicMap(响应);
//返回响应
返回响应跟踪;
}
}
我希望看到良好的代码覆盖率,但不希望编写无用/无效的测试

(关于有效集成测试的建议也会有所帮助。)

你的想法

更新

基于有限的反应,我认为我会通过描述我所认为的“最坏的情况”来进一步引导对话(我最初试图避免的事情)。 我团队中的一位开发人员大力提倡“白盒”单元测试,并尽可能多地覆盖代码。根据他的方法,我们将进行以下测试:

  • 构造对象时,如果“dependency”属性为null,则引发ArgumentNullException
  • 构造对象时,如果“mappingEngine”属性为null,则会引发ArgumentNullException
  • 构造对象时,如果两个参数都不为null,则不会引发ArgumentNullException
  • 构造对象后,Dependency属性将“Dependency”参数中传递的对象返回给构造函数
  • 构造对象后,MappingEngine属性将“MappingEngine”参数中传递的对象返回给构造函数
  • 调用方法时,如果'requestContract'属性为null,则会引发ArgumentNullException
  • 调用方法时,如果'requestContract'属性不为null,则不会引发ArgumentNullException
  • 调用方法时,模拟的ImapingEngine的DynamicMap()方法只调用一次,并将RequestContract传递给方法
  • 调用该方法时,仅调用一次模拟IDependency的DoSomethingWith()方法,并使用从模拟IMappingEngine返回的请求对象
  • 调用该方法时,模拟的ImapingEngine的DynamicMap()方法只调用一次,并且从模拟的IDependency返回响应对象
  • 调用该方法时,将返回从模拟IMappingEngine返回的ResponseTract对象
  • 正如您所看到的,这会导致大量测试,这些测试实际上是在测试实现,而不是反映更高级别的需求(表中的另一种方法)

    这是您进行测试的方式还是您会选择不同的路线

    我想要一些关于单元测试应该和值得编写的内容的建议和指导


    我过去常常建议进行一系列基本测试,以提供良好的覆盖范围。

    您的问题相当模糊。你能说得更具体一些吗?不过测试中的等价划分有一些缺点。它没有正确地检查边界条件。纪尧姆说:“而不是使用这样的技术,我用我的大脑来决定需要多少单元测试,以及他们应该做些什么:”因为这是一个漫长的一周,我不认为你的评论是侮辱性的,并要求你们两个提供更多的有形的细节。虽然我想了解这种方法背后的思维过程,我不是在寻找计算机科学课程,而是将代码示例放在原始帖子中,以便有具体的内容作为回应的基础。这是我所在组织中的一个典型用例,它在应该测试什么和应该测试什么方面引起了大量的讨论和意见分歧。我的帖子的目的是向广大读者开放这篇文章,看看整个社区对这个话题有什么看法。哦,对不起,我意识到这听起来一定很刺耳,这根本不是我的本意(英语不是我的自然语言),所以如果这听起来像是侮辱,我真的很抱歉,我知道这是一次公开的讨论,我只是想说,我没有遵循任何特定的哲学来决定编写什么测试。再次道歉:(@guillome:equivalence partitioning是一种“使用你的大脑”的方法。但它不是随机选择测试用例,而是一种更系统的方法来选择“值得编写”的测试用例。