Java Basic:访问类

时间:2017-05-01 12:31:03

标签: java junit

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

4 个答案:

答案 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)

为什么不编写一个在类中返回测试字符串的方法,并将该方法公开,以便可以在类外部使用。