C#stubbing.每个可测试对象的接口?

前端之家收集整理的这篇文章主要介绍了C#stubbing.每个可测试对象的接口?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经看到了关于’如何存根你的课程以便你可以控制SUT内发生的事情’的多个答案.

他们说一件事:

Create an interface and inject that interface using dependency injection and create a stub using that same interface that you then inject into the SUT.

但是,我在以前的工作场所学到了什么:

If you unit test,you test all classes/functionality.

这是否意味着对于每个具有特定功能布局的类,您必须创建一个接口?

这意味着类/文件数量几乎是两倍.

如下面的例子所示,这是“走的路”还是我在单元测试过程中遗漏了什么?

作为一个说明:
我正在使用VS2012 Express.这意味着没有’Faker’框架.我正在使用’标准’VS2012单元测试框架.

作为一个非常非常简单的例子,它允许我将传递给SUT的每个接口存根.

IFoo.cs

public interface IFoo
{
    string GetName();
}

Foo.cs

public class Foo : IFoo
{
    public string GetName()
    {
        return "logic goes here";
    }
}

IBar.cs:

public interface IBar : IFoo
{
    IFoo GetFoo();
}

Bar.cs:

public class Bar : IBar
{
    public string GetName()
    {
        return "logic goes here";
    }

    public IFoo GetFoo()
    {
        return null; // some instance of IFoo
    }
}

IBaz.cs:

public interface IBaz
{
    IBar GetBar();
}

Baz.cs:

public class Baz
{
    public IBar GetBar()
    {
        return null; // some instance of IBar
    }
}

解决方法

是的,不是.为了存根依赖,你需要某种抽象,但这主要是因为模拟框架 work(不是全部,自然).

考虑简单的例子.你测试A类,它依赖于B类和C类.对于A的单元测试来说,你需要模拟B和C – 你需要IB和IC(或基类/ w虚拟成员).你需要IA吗?不,至少不适合这个测试.除非A成为对其他类的依赖,否则不需要在接口/基类后面抽象它.

抽象很棒,因为它可以帮助您构建丢失耦合的代码.您应该抽象您的依赖项.但是,在实践中,某些类不需要被抽象,因为它们服务于顶层/层次结构/根角色,并且不在其他地方使用.

猜你在找的C&C++相关文章