Java Basic:类外访问变量
在这个控制器类中,我有一个名为Java Basic:类外访问变量,java,junit,Java,Junit,在这个控制器类中,我有一个名为aceeptick()的方法,它有开关大小写,它有字符串测试变量。现在我想在名为ControllerTest的新类中访问这个变量,您能建议我如何访问这个变量吗 Class Controller{ public String acceptTick() { if (button_Pressed) { turnCarLightRed(); turnPedLightGreen();
aceeptick()
的方法,它有开关大小写,它有字符串测试变量。现在我想在名为ControllerTest的新类中访问这个变量,您能建议我如何访问这个变量吗
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;
}
}
类控制器测试{
公共void testController(){
做{
ob.acceptTick();
++滴答声;
如果(勾号==1){
String car=//这里我想访问“test variable”
assertEquals(“绿色”,汽车);
字符串ped=ob.turnPedLightGreen();
资产质量(“绿色”,ped);
}
}而(勾号<60);
}
您必须将“test”声明为类变量,并为其提供getter方法。
或者让您的“acceptTick()”-方法返回“test”(因为您似乎没有使用该方法的实际返回值)将控制器类更改为具有公共变量:
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);
}
然后从此行中删除String
String test=turnCalightred();
现在,您可以从ControllerTest类访问变量,如下所示:
String car=ob.test;
从技术上讲,您可以选择:
Class Controller{
public String test; // variable added here
public String acceptTick() {
if (button_Pressed) {
turnCarLightRed();
turnPedLightGreen();
您在类a中创建一个字段,将其公开(或者省略关键字,则可见性为“包保护”;允许在同一个包中访问);然后您只需要另一个类的实例,就可以直接使用该变量
但从概念上来说,答案是:你不会那样做
好的OO编程是关于隐藏实现细节;还有更多:当您公开字段时,您允许任何其他类更改该字段的内容
为了解决这一部分,您宁愿选择:
class A {
public String whatever = "bla";
}
class B {
void foo() {
String other = new A().whatever;
}
这允许其他类查询该字段;而不可能更改它
最后一步:在好的OO中,你甚至可以避免这种情况。好的OO是关于行为,而不是状态。换句话说,你不会要求另一个对象给你一些值,然后根据这些值做出决定。相反,你在另一个类上放了一个很好的方法,它可以满足你的需要。其背后的原理叫做
除此之外,您还可以编写一个单元测试来测试多个条件
您希望为每个条件编写一个测试。换句话说,您的测试代码不应该循环。相反,您使用所需的参数调用您的测试中的类。这突出了整个设置中的另一个问题:而不是测试用例班级
长话短说:在进一步深入单元测试之前,您应该后退一步,学习一些好的OO的基础知识。为什么不在类中编写一个方法,返回测试字符串,并将该方法公开,以便可以在类外使用。感谢您的接受!
class A {
private String whatever = ...
public String getWhatever() { return whatever };