相关疑难解决方法(0)

如何测试私有函数或具有私有方法,字段或内部类的类?

如何对具有内部私有方法,字段或嵌套类的类进行单元测试(使用xUnit)?或者通过内部链接(static在C/C++中)或在私有(匿名)命名空间中使其成为私有的函数?

为了能够运行测试而更改方法或函数的访问修饰符似乎很糟糕.

java tdd unit-testing

2593
推荐指数
36
解决办法
82万
查看次数

我应该测试私有方法还是仅测试公共方法?

我读过这篇关于如何测试私有方法的帖子.我通常不测试它们,因为我一直认为只测试从对象外部调用的公共方法会更快.你测试私人方法吗?我应该经常测试吗?

language-agnostic testing unit-testing

329
推荐指数
16
解决办法
10万
查看次数

被测单元:Impl还是接口?

假设我有实现它的接口和实现类,我想为此编写单元测试.我应该测试什么接口或Impl?

这是一个例子:

public interface HelloInterface {
    public void sayHello();
}


public class HelloInterfaceImpl implements HelloInterface {
    private PrintStream target = System.out;


    @Override
    public void sayHello() {
        target.print("Hello World");

    }

    public void setTarget(PrintStream target){
        this.target = target;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,我有HelloInterface和HelloInterfaceImpl来实现它.什么是被测单元接口或Impl?

我认为它应该是HelloInterface.考虑下面的JUnit测试草图:

public class HelloInterfaceTest {
    private HelloInterface hi;

    @Before
    public void setUp() {
        hi = new HelloInterfaceImpl();
    }

    @Test
    public void testDefaultBehaviourEndsNormally() {
        hi.sayHello();
        // no NullPointerException here
    }

    @Test
    public void testCheckHelloWorld() throws Exception {
        ByteArrayOutputStream out = new ByteArrayOutputStream(); …
Run Code Online (Sandbox Code Playgroud)

java unit-testing dependency-injection mockito

31
推荐指数
3
解决办法
2万
查看次数

当基类被驱逐出来时,单元测试如何改变?

这部分是这个问题的后续行动.

我不确定最好的方式来问这个,所以我会尝试一个简短的故事来设置场景:

曾几何时,有一个类'A',它有一个单元测试类'ATests'负责通过公共接口测试它的行为.他们幸福地在一起生活了一段时间然后发生了变化,并且"B"级出现了,因为它与"A"级有很多共同之处,因此引入了一个基类.

A类的测试已经涵盖了基类的公共行为.那么问题是接下来会发生什么?

•B类是否需要对公共(基类行为)进行测试?看起来行为是B的一部分,所以应该进行测试,但这些测试是否应该与A类共享?对于基类?如果是这样,分享的最佳方式是什么?

•新基类是否需要单元测试,或者基类是否可以通过子项测试进行测试?基类是抽象的是否重要?

•是否足以确保类A和B派生自基类并"信任"基类的单元测试以测试常见行为(因此测试不需要在子类中复制)?A&B的测试只需要测试它们是新的/改变的行为吗?

•我是否遵循完全错误的方法,每个真实班级大约有一个单元测试课程?

我在不同的时间采取了不同的观点,不同的方法会对重构代码的能力,编写测试的时间等产生相当大的影响.人们发现哪些方法效果最好?

tdd unit-testing

8
推荐指数
1
解决办法
499
查看次数

内部课程应该进行单元测试吗?

我们正在开发一种新的API.我的同事和我对内部课程是否应该进行单元测试有不同的看法.

我的同事给出的不是单元测试内部课程的要点

  1. 单元测试应仅针对公共类/方法编写
  2. 您应该能够通过公共API本身覆盖您的完整代码,包括内部类.如果您的内部类没有通过公共接口进行测试,这意味着有一些丢失的测试用例,或者您找到了不需要的死代码.
  3. 为内部类编写单元测试可能会导致冗余测试,或者可能强制编写从不需要的代码.

我给出的分数有利于单元测试内部课程

  1. 通过单元测试覆盖完整代码只有公共类可能是困难/不切实际的.为内部类编写单元测试确保它们至少在自己的世界中正确运行,并且我们可以进行集成测试以测试整个应用程序的正确性.
  2. 即使有一些冗余的单元测试,也比在顶层缺少测试用例更好.
  3. 内部课程是公共的,所以我们应该独立测试它们.如果只有一个公共类和100个内部类,则很难通过公共接口覆盖所有场景.

我尝试在线搜索,但似乎没有关于此的最佳实践或标准意见.你认为一个好的方法是什么?

对java人员的注意: " internal "是C#中的一个关键字,它限制了类对程序集的可见性.在程序包/程序集之外无法访问该类.它不等同于私人阶级.

c# tdd unit-testing

4
推荐指数
1
解决办法
1028
查看次数