gpt4 book ai didi

java - 无法从 Java 中的 junit 访问公共(public)成员变量

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:48:19 26 4
gpt4 key购买 nike

大家好,我的问题如下:我想为我写的一门课写一个测试单元。为此,我有以下 Junit 代码:

  1 package ts;
2 import ts.TransitionSystem;
3 import ts.ConcreteTransitionSystem;
4 import java.util.Set;
5 import java.util.HashSet;
6 import java.util.HashMap;
7
8 import org.junit.Test;
9 public class TransitionSystemTest {
10
11 @Test
12 public void addInitialTest () {
13 TransitionSystem ts = new ConcreteTransitionSystem();
14 ts.addInitialState("test");
15 assertTrue(ts._initialStates.contains("test"));
16 assertTrue(ts._states.get("s0").isEmpty());
17 }
18
19 }

我的类如下所示:

  1 package ts;
2
3 import java.util.Set;
4 import java.util.HashSet;
5 import java.util.HashMap;
6 import ts.TransitionSystem;
7
8 public class ConcreteTransitionSystem implements TransitionSystem {
9 Set<String> aps;
10 HashMap<String, Set<String>> _states;
11 Set<String> _initialStates;
12
13 public void addInitialState(String s0) {
14 Set<String> sucessors = new HashSet<String>();
15 this._states.put(s0, sucessors);
16 this._initialStates.add(s0);
17 }
18 }

它得到的错误如下:

TransitionSystemTest.java:15: error: cannot find symbol
[javac] assertTrue(ts._initialStates.contains("test"));
[javac] ^
[javac] symbol: variable _initialStates
[javac] location: variable ts of type TransitionSystem

TransitionSystemTest.java:16: error: cannot find symbol
[javac] assertTrue(ts._states.get("s0").isEmpty());
[javac] ^
[javac] symbol: variable _states
[javac] location: variable ts of type TransitionSystem

我无法找出问题所在。有什么想法吗?

最佳答案

您最初的问题是,您试图通过 TransitionSystem 接口(interface)访问类内部变量 - 您当然只能访问接口(interface)中定义的方法(可能还有常量)。这真是一件好事,因为它将公共(public)契约(接口(interface))与实现类分开了!因此你应该重新考虑你的单元测试也只使用接口(interface)方法!接口(interface)(以及一些需求文档中定义的所需行为)定义了实现类与外部世界的契约,任何你无法通过其接口(interface)测试的东西都只是:实现类的内部实现细节。

关于java - 无法从 Java 中的 junit 访问公共(public)成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20275467/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com