java - 为什么我的方法在我的 API 中有效,但在测试类中无效?
问题描述
我在对功能进行单元测试时遇到问题。
public User[] fetchUserByStarsAscendingOrder(String username) throws IOException {
User[] user = fetchUser(username);
Arrays.sort(user,Collections.reverseOrder());
return user;
}
public User[] fetchUser(String username) throws IOException {
URL url = new URL("https://api.github.com/users/" + username + "/repos");
InputStreamReader reader = new InputStreamReader(url.openStream());
User[] user = new Gson().fromJson(reader, User[].class);
if (user == null) {
logger.error("No input provided.");
return null;
} else {
logger.info("The output returned.");
return user;
}
}
上述方法在我的 API 中运行良好,没有任何问题。
但是当我尝试在我的测试类中使用它时,使用相同的参数......它突然返回 null:
class UserServiceTest {
UserService userService;
User aUser;
@Test
void shouldReturnArray() throws IOException {
//given
String name = "pjhyett";
//when
User[] resultArray = userService.fetchUserByStarsAscendingOrder(name);
//then
assertThat(resultArray[0]).isEqualTo(aUser);
}
@BeforeEach
void setUp() {
aUser = new User();
aUser.setFull_name("pjhyett/github-services");
aUser.setDescription("Moved to http://github.com/github/github-services");
aUser.setClone_url("https://github.com/pjhyett/github-services.git");
aUser.setStars(408);
aUser.setCreatedAt("2008-04-28T23:41:21Z");
}
以上所有数据均取自 GitHub API,是关于公共 repos 的。我正在寻找数组中的第一个元素,因为该方法返回了数组的几个结果。
IDE 告诉我,在 API 本身中完美运行的方法......在测试类中返回 null。
这是为什么?
解决方案
UserService
在初始化方法中实例化。
您获得 NPE 是因为UserService
从未实例化。setUp()
考虑在方法中实例化变量。
推荐阅读
- java - 如何用我自己创建的键盘替换普通的 InputMethod/Keyboard?
- c# - 当 Selenium ChromeDriver 的 URL 改变时触发一个事件
- visual-studio - 亚音速 ORM 发生器输出中文
- airflow - 使用代码,如何更新气流变量?
- android - 尝试使用 SQlite 创建表时出错
- delphi - 自定义控制感应加速字符
- azure - 我可以将现有的 Azure Redis 缓存从传统的经典 Azure 订阅移动到 CSP 吗?
- runtime - 什么是运行时单个循环,但它运行了 n 次?
- spring - 在 Spring SFTP 上设置首选身份验证方法
- c# - 启用 Windows 2008 R2 以接受对枚举 SslProtocols 3072 的强制转换