相关疑难解决方法(0)

使用友元类与在C++中添加访问器进行单元测试?

添加返回对象内部状态的函数进行单元测试是否更好,而不是让测试类成为朋友? - 尤其是当除了单元测试的情况之外没有用于功能的情况.

c++ unit-testing friend-class

11
推荐指数
2
解决办法
4102
查看次数

我想测试一个私有方法 - 我的设计有问题吗?

所以我对软件测试非常陌生,我正在考虑为我的一个应用程序添加几个测试.我有一个公共方法addKeywords(),它沿途调用私有方法removeInvalidOperations().这种私有方法调用外部API,并且有大约50行代码.我认为这是一个有点复杂的方法,我想通过调用addKeyword()方法来测试它,而不必这样做.然而,这似乎不可能(至少不是JUnit).

我所看到的信息表明,测试私有方法的愿望可能是代码味道.有些人认为这可能表明这应该被重构为一个单独的类并公之于众.此外,还有一些建议,如果您确实需要,那么您可以对生产代码进行编辑,例如更改私有方法的可见性.

我真的不明白为什么我当前的代码设计有问题,但也不喜欢编辑我的生产代码以满足我的测试需求的想法.

正如我所说 - 我对测试很新,所以任何帮助都非常感激.此外,如果有任何进一步的信息,我可以告诉我,以帮助解答.

java testing integration-testing unit-testing

11
推荐指数
2
解决办法
5247
查看次数

你可以在scala中测试嵌套函数吗?

有没有办法测试嵌套函数(理想情况下使用ScalaTest)?

例如,有没有办法g()在下面的代码中测试:

def f() = {
  def g() = "a string!"
  g() + "– says g"
}
Run Code Online (Sandbox Code Playgroud)

testing scala scalatest

10
推荐指数
1
解决办法
2390
查看次数

Junit保护方法

我想知道在Junit中处理受保护方法的好方法.

假设我想测试一个名为A的类,它有一个受保护的成员和构造函数.我明白为了测试类,AI应该编写另一个名为ATest的类,它可能扩展TestCase(这在Junit3中应该是强制的).因为我想测试一个受保护的方法,并且因为A有一个受保护的构造函数,我的测试类ATest也应该扩展实现该方法的类A,以便能够创建该类并访问该方法.

可能是两个类的双重继承一个很好的解决方案?

PS我已经知道在Junit 4中可以避免TestCase的继承.

java junit junit4 junit3

9
推荐指数
1
解决办法
8968
查看次数

单元测试 - 设置私有成员以获得所需的对象状态

我正在采取单元测试的第一步,并且有封装问题.我的类有一些不应该对客户端可见的私有成员变量,但为了让我将对象置于我想要测试它的状态,我需要设置这些私有变量.

说我有这样的代码:

Class Foo {

public:
  int action() ;  
private:
  int state ;

} ;

int Foo::action()
{
  if(this->state == 1)
    return 1 ;
  else
    return 0 ;
}
Run Code Online (Sandbox Code Playgroud)

所以现在我想测试Foo::action(),但我需要能够设置Foo::state能够在不同场景下检查功能.一个解决方案是define private public测试代码中的邪恶" ".但是有更优雅的东西吗?我想强调的是,这Foo::state是一个客户端不应该访问的变量,因此我不想声明任何公共setter.

编辑:

我现在认为扩展我想在测试代码中测试的类并在该派生类中包含setter会起作用,只要我将私有变量更改为protected.但这是一个"仅限一代"的解决方案,仍然感觉像是一个黑客而不是一个正确的方法.

编辑2:

在阅读了答案和评论之后我得到了(特别感谢Lieven和ap.)我相信我现在要测试的实际课程(不是我提供的简单例子)只是做得太多而我的问题的答案正在移动它的一些逻辑进入另一个将由大家伙使用的类.

c++ unit-testing

9
推荐指数
1
解决办法
1188
查看次数

使用CppUnit测试静态函数

我的项目包含C文件.在某些文件中,我将函数定义为static.

我在单元测试中使用CppUnit,我想测试这些静态函数.我知道不允许从文件外部(它定义的地方)调用函数.有没有解决方案来避免这个问题,以便从我的C++测试文件中调用这些静态函数?

c c++ unit-testing cppunit

9
推荐指数
1
解决办法
1049
查看次数

使用包私有方法以便于单元测试是一个好习惯吗?

有时候,如果我将某些方法的可见性从私有更改为私有,为了便于单元测试模拟,断言,我发现自己处于单元测试会更容易的情况下......

一个例子就是这样

假设我有一个包含4个属性X,Y,Z和R的对象A,其中X,Y和Z是集合,R是每个集合的不同元素之间的关系,例如,关系将由X的元素组成, Y的元素和Z的元素.对象A不允许直接访问X,Y,Z或R,而是提供了一个丰富的API,允许您在X,Y和Z上创建新元素,也允许您将这些元素混合成新的R元素.对于单元测试,使用公共getX(),public getY(),public getZ()和public getR()方法非常方便,因此每次调用时我都可以对对象的内部做出确切的断言.对象API.但是,暴露X,Y和Z是我想要防止的,这就是为什么从非常开始的对象使这些元素变得私有,并且只使用它的API提供对它们的间接访问.然而,提供包私有方法getX(),getY(),getZ()和getR()是否有意义,以便至少形成单元测试我可以轻松检查对象的内部状态是否是预期的?

缺点当然是方法的可见性增加,并且鉴于这种方法是私有的,有充分的理由,感觉有点奇怪.

当然我可以使用反射来达到同样的效果,但感觉更脏.

所以问题是,这是一种好的还是坏的做法?这是代码味吗?它会发生在别人身上吗?这有更好的技术吗?

java unit-testing encapsulation

9
推荐指数
1
解决办法
2569
查看次数

非公开功能应该进行单元测试吗?

我正在为我的一些代码编写单元测试,并遇到了一个情况,我有一个具有小暴露接口但内部结构复杂的对象,因为每个公开的方法都会运行大量内部函数,包括对象状态的依赖性.这使得外部接口上的方法很难进行单元测试.

我最初的问题是我是否应该单独测试这些内部函数,因为它们更简单,因此更容易编写测试?我的直觉是肯定的,这导致后续问题,如果是这样,我将如何在C++中这样做呢?

我提出的选项是将这些内部函数从private更改为protected,并使用friend类或inheritence来访问这些内部函数.这是执行此操作的最佳/唯一方法是保留隐藏内部方法的一些语义吗?

c++ unit-testing

8
推荐指数
4
解决办法
1021
查看次数

单元测试Android中的私有功能

我们可以使用Android Mock对Android应用程序的私有函数和字段进行单元测试吗?

如果是,请解释如何?

android unit-testing easymock

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

Java测试类有很多私有方法

我有一个类,负责将合同从CSV导入数据库.

类本身只有一个开始导入的公共方法,而其他方法都是私有的(因为只有类本身才会使用,并且它们保持逻辑).

我开始使用Spock为这个类进行测试,并且有许多私有方法,我该如何测试它?

我应该把它们变成公开测试吗?只测试主要方法,公共方法?

什么是最好的?

java junit integration-testing unit-testing spock

8
推荐指数
2
解决办法
7146
查看次数