我有一个单元测试课Tester; 我希望它访问Working类的私有字段.
class Working {
// ...
private:
int m_variable;
};
class Tester {
void testVariable() {
Working w;
test( w.m_variable );
}
}
Run Code Online (Sandbox Code Playgroud)
我有以下选择:
public- 丑陋test_getVariable()- 过于复杂friend class Tester到工作 - 然后明确地工作"知道"测试器,这是不好的我的理想是
class Working {
// ...
private:
int m_variable;
friend class TestBase;
};
class TestBase {};
class Tester : public TestBase {
void testVariable() {
Working w;
test( w.m_variable );
}
}
Run Code Online (Sandbox Code Playgroud)
Working知道TestBase而不是每个测试......但它不起作用.显然友谊不适用于继承.
这里最优雅的解决方案是什么?
我们可以使用Android Mock对Android应用程序的私有函数和字段进行单元测试吗?
如果是,请解释如何?
我用robolectric写了一些测试,现在我想做一些真正的测试类.
我注意到的一件事是我无法测试onCreate,onLocationChanged等事件.
测试事件的标准做法是什么?
如果iI提取事件中的代码并将它们放在方法中,事件将调用该方法,并且robolectro也可以调用该方法,当然该方法需要公开,对吧?
另外,如果我想在我的方法中测试通常是私有变量的东西,那么我需要添加一个公共getter,对吧?我可以从robolectric检查一下吗?
有没有更好的方法将数据公开给robolectric?
遵循测试驱动开发.
我最近实现了一个需要干净界面的算法(A*).通过干净我想要的是一些属性和一个搜索方法.
我发现很难找到的是测试搜索方法.它包含大约五个步骤但我基本上被迫在一个大的进程中编写这个方法,这使得事情变得困难.
对此有什么建议吗?
编辑
我正在使用C#.不,我目前没有手头的代码.我的问题依赖于一个测试只在实现整个搜索方法后才通过 - 而不是算法中的一个步骤.我自然重构了代码,但它实现了我发现很难.
我最近开始意识到powermock的Whitebox功能.(总之,它允许您直接测试私有方法或直接从单元测试修改私有成员 - 同时保持私有!)
我知道除了可见方法之外,还有一些思想框架在单元测试之后不屑一顾,但是有时它只是想要一个简单的测试来确保深层辅助方法正在做它应该做的事情......没有经历可能是巨大的开销来准备父方法过滤到你的方法所需的参数和模拟......然后你只需要做魔法来提取内部方法的结果.简而言之,有时测试这些内部方法需要最复杂且难以遵循的单元测试.(而且,我们公司的政策是100%的单位测试覆盖率.这些方法必须经过测试!)
我知道一种方法是更改方法访问器以允许单元测试(例如,从更改private到protected,但powermock Whitebox允许直接测试而不更改源代码.
不过,妈妈总是说,"只因为你可以,并不意味着你应该这样做."
是否适合测试这样的内部方法?如果是这样,我应该使用的经验法则是什么?
我有一个要求,我必须调用抽象类的私有方法.
假设抽象类如下所示: -
public abstract class Base {
protected abstract String getName();
private String getHi(String v) {
return "Hi " + v;
}
}
Run Code Online (Sandbox Code Playgroud)
有些人可以告诉我有没有办法可以打电话getHi(可能是通过Reflection或其他方式),以便我可以测试出来?我正在使用Junit 4.12和Java 8
我已经解决了这个问题,但这里的方法在抽象类中并不是私有的.
我也经历过这个问题,即使这个问题也没有谈到抽象类中的私有方法.
我不是在这里问我们是否应该测试私有方法或者测试私有方法的最佳策略是什么.网上有很多关于此的资源.我只是想问一下如何在java中调用抽象类的私有方法.
我正在尝试使用Karma-Jasmine测试我的Angular服务,我需要确保在服务初始化后loadApp调用了函数.测试它的最佳方法是什么?
import { Injectable, NgZone } from '@angular/core';
@Injectable()
export class GdlService {
appName = 'myAppName';
constructor(
private ngZone: NgZone,
) {
this.ngZone = ngZone;
this.loadApp(this.appName);
}
private loadApp(appName) {
this.ngZone.runOutsideAngular(() => {
// ...some logic
});
}
}
Run Code Online (Sandbox Code Playgroud) 我的班级包含14 private methods和1 public method.public方法通过其他私有方法直接或间接调用所有私有方法.
public方法还调用DAO查询数据库的方法.我为班级写了一个单元测试.由于您无法为私有方法编写单元测试,因此我将所有私有方法更改为默认访问权限并为其编写单元测试.
有人告诉我,我不应仅仅为了测试而改变封装.但我的公共方法调用DAO并从调用中获取其数据.即使我要为公共方法编写测试,我也认为它会非常复杂.
我应该如何处理这个问题.一方面,我必须为访问DAO的公共方法编写一个非常复杂的测试,另一方面,更改方法的访问级别并为它们编写简短的测试方法.我该怎么办?
任何建议将不胜感激
假设您正在测试一个类的公共方法 A 和私有方法 B,现在只能间接测试 B。直接测试 B 的最佳方法是什么?
1)制作Bpublic
2) 仅在测试期间将B`公开。
3)制作Bprotected
4)使B具有默认访问权限。
假设我们有以下代码块:
public void foo(){
bar();
}
private void bar(){
//do something in here
}
Run Code Online (Sandbox Code Playgroud)
我的问题是如何在jUnit测试中验证是否调用了bar()方法?使用Mockito或其他框架是否可以做到这一点?
unit-testing ×6
java ×4
junit ×3
android ×2
testing ×2
angular ×1
c++ ×1
easymock ×1
junit4 ×1
karma-runner ×1
methods ×1
mockito ×1
powermock ×1
private ×1
public ×1
robolectric ×1
tdd ×1
typescript ×1
white-box ×1