Class Controller{
public String acceptTick() {
if (button_Pressed) {
turnCarLightRed();
turnPedLightGreen();
tick=0;
button_Pressed = false;
} else{
switch (tick) {
// at sec 1
case 1:
turnCarLightYellow();// carlight is yellow
String test = turnCarLightRed(); // Car light is now red
turnPedLightGreen();// PedLight is Green
break;
// after 10 sec
case 10:
turnPedLightRed();// Pedlight is Red
turnCarLightGreen();// CarLight is Green
break;
// after another 15 seconds
case 25:
turnCarLightYellow();
turnCarLightRed();
turnPedLightGreen();
tick = 0;
break;
}
}
return currentCarLight;
}
}
在这个Controller类中,我有一个名为aceeptTick()
的方法,它有switch case并且有 String test 变量。现在我想在我的新类名为 ControllerTest 中访问此变量,您能建议我如何访问此变量吗?
class ControllerTest{
public void testController() {
do {
ob.acceptTick();
++tick;
if (tick == 1) {
String car = //here I want to access "test variable"
assertEquals("Green", car);
String ped = ob.turnPedLightGreen();
assertEquals("Green", ped);
}
} while (tick < 60);
}
答案 0 :(得分:1)
您必须将' test '声明为类变量,并为其提供getter-Method。 或者你做' acceptTick()' - 方法返回'测试'(因为你似乎没有使用方法的实际返回值)
答案 1 :(得分:1)
从技术上讲,你会去:
class A {
public String whatever = "bla";
}
class B {
void foo() {
String other = new A().whatever;
}
您在A类中创建字段,将其设为公开(或者省略关键字,然后可见性为&#34;包受保护&#34 ;;允许在同一个包中访问);然后你只需要另一个类的实例,并可以直接使用该变量。
但从概念上讲,答案是:你不要这样做。
良好的OO编程是关于隐藏实现细节;以及更多:当您公开字段时,您允许任何其他类更改该字段的内容!
为了解决问题,你宁愿选择:
class A {
private String whatever = ...
public String getWhatever() { return whatever };
这允许其他类查询该字段;没有可能改变它。
并采取最后一步:在良好的OO中你甚至避免这样做。好的OO是关于行为,而不是状态。换句话说:你不要求另一个对象给你一些价值,然后根据它做出决定。相反,你在做所需的其他类上放了一个不错的方法。其背后的原理称为Tell dont ask!
除此之外:你不编写一个单元测试来测试多个条件。
您想要编写一个测试每条件。换句话说:您的测试代码不应该循环。相反,您使用所需参数调用正在测试的类。在整个设置中出现另一个问题:不应该是滴答您的生产类的测试用例。
长话短说:在进一步深入单元测试之前,你应该退一步学习一下优秀面向对象的基础知识。
答案 2 :(得分:0)
将Controller类更改为具有公共变量:
Class Controller{
public String test; // variable added here
public String acceptTick() {
if (button_Pressed) {
turnCarLightRed();
turnPedLightGreen();
然后从此行String
String test = turnCarLightRed();
现在您可以从ControllerTest类中访问变量:
String car = ob.test;
答案 3 :(得分:0)
为什么不编写一个在类中返回测试字符串的方法,并将该方法公开,以便可以在类外部使用。