Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Basic:类外访问变量_Java_Junit - Fatal编程技术网

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 };