代码之家  ›  专栏  ›  技术社区  ›  Deepboy

junit-未找到@before中的变量

  •  -1
  • Deepboy  · 技术社区  · 6 年前

    我正在尝试执行下面的代码。我的IDE告诉我

    无法将用户角色员工解析为变量

    这是我的代码:

    public class TestUserHelper {
    
        @Before
        public void setUp() throws Exception {
            String USER_ROLE_EMPLOYEE="Service Desk";
            String USER_ROLE_MANAGER="Store Manager";
        }
    
        @Test
        public void testIsUserRoleValidEmployee() {
            Assert.assertTrue(UserValidator.validateSupervisor(USER_ROLE_EMPLOYEE));
        }
    
        @Test
        public void testIsUserRoleValidSupervisor() {
            Assert.assertTrue(UserValidator.validateSupervisor(USER_ROLE_MANAGER));
        }
    }
    

    我说错话了 USER_ROLE_EMPLOYEE , USER_ROLE_MANAGER 无法解析为变量。

    我做错什么了?

    2 回复  |  直到 6 年前
        1
  •  1
  •   O.O.Balance    6 年前

    Java有不同类型的变量:

    • 局部变量 . 这些方法在一个方法中声明,只能从相同方法中访问。我们说这些变量 局部范围 . 你的 USER_ROLE_EMPLOYEE USER_ROLE_MANAGER 变量是局部变量。因此,从他们所声明的方法中访问它们是不可能的。
    • 实例变量 . 它们在类的每个实例中单独存在,并且可以从任何实例访问。 非静态的 方法。与局部变量相反,它们也可以从类外部访问;但是类的实例始终是必需的。您声明它们就像本地变量,除了声明 外面 任何方法(直接在类中)。他们应该在上面。你应该加一个 访问修饰符 (像 private )对他们来说,多读一些 here .
    • 然后是 类变量 ( static 变量)。与实例变量不同,这些变量只存在一次,并且可以从类中的任何方法访问(甚至)。 静止的 那些)在与实例变量相同的位置声明类变量,但使用 静止的 关键字。与实例变量一样,这些类将根据您声明的访问修饰符从类外部访问。与实例变量不同,它们不需要类的实例。

    所以,在你的代码中你可以:

    1. 使用实例变量而不是局部变量:

      public class TestUserHelper {
      
          private String USER_ROLE_EMPLOYEE, USER_ROLE_MANAGER;
      
          @Before
          public void setUp() throws Exception {
              USER_ROLE_EMPLOYEE = "Service Desk";
              USER_ROLE_MANAGER = "Store Manager";
          }
      
          @Test
          public void testIsUserRoleValidEmployee() {
              Assert.assertTrue(UserValidator.validateSupervisor(USER_ROLE_EMPLOYEE));
          }
      
          @Test
          public void testIsUserRoleValidSupervisor() {
              Assert.assertTrue(UserValidator.validateSupervisor(USER_ROLE_MANAGER));
          }
      }
      
    2. 或者,我推荐第二种方法,因为你的变量 常数 宣布它们为 静止的 (类变量)和 final (常数)。您将无法初始化它们。 setUp() 但既然它们是不变的,那就不成问题了:

      public class TestUserHelper {
      
          private static final String USER_ROLE_EMPLOYEE = "Service Desk";
          private static final String USER_ROLE_MANAGER = "Store Manager";
      
          @Test
          public void testIsUserRoleValidEmployee() {
              Assert.assertTrue(UserValidator.validateSupervisor(USER_ROLE_EMPLOYEE));
          }
      
          @Test
          public void testIsUserRoleValidSupervisor() {
              Assert.assertTrue(UserValidator.validateSupervisor(USER_ROLE_MANAGER));
          }
      }
      
        2
  •  0
  •   Ori Marko    6 年前

    之前是一个设置 方法 当前变量只在方法作用域中是局部的,将其作为常量移动到类中,正如@jb niset所提到的

        private final static String USER_ROLE_EMPLOYEE="Service Desk";