我正在编写一些单元测试.特别是我想测试一些私有方法.
到目前为止,我已经提出了使用.
#define private public
Run Code Online (Sandbox Code Playgroud)
但我对此并不满意,因为它会从单元测试的角度破坏所有封装.
您使用什么方法对私有方法进行单元测试.
public class A {
public void method(boolean b){
if (b == true)
method1();
else
method2();
}
private void method1() {}
private void method2() {}
}
public class TestA {
@Test
public void testMethod() {
A a = mock(A.class);
a.method(true);
//how to test like verify(a).method1();
}
}
如何测试私有方法是否被调用,以及如何使用mockito测试私有方法???
谁有针对这一共同需求的解决方案.
我的应用程序中有一个类.
一些方法是公共的,因为它们是api的一部分,有些是私有的,因为它们用于内部使用,使内部流程更具可读性
现在,我想写一个单元测试,或者更像是集成测试,它将位于不同的包中,允许调用此方法,但是,我希望不允许正常调用此方法如果你试图从应用程序本身的类中调用它
所以,我在想这样的事情
public class MyClass {
public void somePublicMethod() {
....
}
@PublicForTests
private void somePrivateMethod() {
....
}
}
Run Code Online (Sandbox Code Playgroud)
上面的注释将私有方法标记为"公共测试",这意味着,对于任何在test ...包下的类,将允许编译和运行时,而编译和\或运行时将对任何类失败不在测试包下.
有什么想法吗?有这样的注释吗?有一个更好的方法吗?
似乎你写的单元测试越多,你的更多信息就会破坏你的封装......
在TDD开发中,您通常首先要创建接口,然后开始针对该接口编写单元测试.当您逐步完成TDD过程时,您最终会创建一个实现接口的类,然后在某些时候您的单元测试将通过.
现在我的问题是关于我可能必须在我的类中编写的私有和受保护的方法,以支持接口公开的方法/属性:
班级中的私有方法是否应该有自己的单元测试?
班级中受保护的方法是否应该有自己的单元测试?
我的想法:
特别是因为我正在编写接口,我不应该担心受保护/私有方法,因为它们是黑盒子.
因为我正在使用接口,所以我正在编写单元测试以验证定义的合同是否由实现接口的不同类正确实现,所以我再也不担心私有/受保护的方法,并且应该通过调用它的单元测试来执行它们.接口定义的方法/属性.
如果我的代码覆盖率没有显示受保护/私有方法被命中,那么我没有正确的单元测试,或者我有没有被使用的代码,应该被删除.
我被分配了一个单元测试任务的任务,我从未直接用JUnit工作,并且严格禁止更改包中的代码.这通常没有问题,因为我们的大多数单元测试只是为了功能和输入/输出的一致性,这可以通过运行例程并检查它们的返回值来完成.
但是,偶尔需要检查类中的私有变量,或者直接编辑私有变量以检查某些内部行为.有没有办法获得访问这些,无论是通过JUnit或任何其他方式,为了单元测试而不实际更改原始源包中的任何代码?如果没有,那么程序员如何在现实世界中处理这个问题,而单元测试人员可能与编码器不同?
在C++中,我经常将单元测试类作为我正在测试的类的朋友.我这样做是因为我有时觉得需要为私有方法编写单元测试,或者我想要访问某个私有成员,这样我就可以更轻松地设置对象的状态,以便我可以测试它.对我来说,这有助于保持封装和抽象,因为我没有修改类的公共接口或受保护的接口.
如果我购买第三方库,我不希望它的公共接口被一堆我不需要知道的公共方法污染,因为供应商想要进行单元测试!
我也不想担心一群受保护的成员,如果我从一个类继承,我不需要知道.
这就是我说它保留抽象和封装的原因.
在我的新工作中,他们不赞成使用朋友课,甚至进行单元测试.他们说因为班级不应该"知道"关于测试的任何内容,而且你不希望课程和测试的紧密耦合.
有人可以向我解释这些理由,以便我可以更好地理解吗?我只是不明白为什么使用朋友进行单元测试很糟糕.
你如何处理Haskell中的函数可见性和单元测试?
如果导出模块中的每个函数以便单元测试可以访问它们,则可能会冒其他人调用不应该在公共API中的函数.
我想到使用{-# LANGUAGE CPP #-}然后用以下方法包围出口#ifdef:
{-# LANGUAGE CPP #-}
module SomeModule
#ifndef TESTING
( export1
, export2
)
#endif
where
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
在对某些C代码应用单元测试时,我们遇到了一个问题,即在不修改源代码的情况下,无法在测试文件中调用某些静态函数.有没有简单或合理的方法来解决这个问题?
我想为我的C++应用程序进行单元测试.
测试班级私人成员的正确形式是什么?创建一个测试私有成员,使用派生类或其他技巧的朋友类?
测试API使用哪种技术?
我用GHUnit.我想单独测试私有方法,不知道如何测试它们.我找到了很多关于为什么不测试私有方法的答案.但没有找到如何测试它们.
我不想讨论是否应该测试私有,但是会关注如何测试它.
谁能给我一个如何测试私有方法的例子?