The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:
GitHub 是一个非常棒的平台,用于维护 Git 源码并跟踪项目问题。大约三年前,我将所有的私有和公共项目都迁移到 GitHub,并且毫不后悔。此外,GitHub 通过 RESTful JSON API 提供了几乎所有的功能。
有一些 Java SDK 封装和暴露了这个 API。我尝试使用它们,但是遇到了一些问题:
它们不是基于JSR-353(JSON Java API)。
他们没有提供任何模拟工具
它们不涵盖整个 API 并且无法被扩展。
牢记所有这些缺点,我创建了自己的库-jcabi-github。让我们来看看它最重要的优点。
GitHub 服务器是一个对象。一个问题的集合是一个对象,一个单独的问题是一个对象,它的作者是一个作者,等等。例如,要获取作者的姓名,我们使用:
不用说,GitHub
、Repos
、Repo
、Issues
、Issue
和User
都是接口。实现它们的类在库中不可见。
MkGitHub
class is a mock version of a GitHub server. It behaves almost exactly the same as a real server and is the perfect instrument for unit testing. For example, say that you’re testing a method that is supposed to post a new issue to GitHub and add a message into it. Here is how the unit test would look:
public class FooTest {
@Test
public void createsIssueAndPostsMessage() {
GitHub github = new MkGitHub("jeff");
github.repos().create(
Json.createObjectBuilder().add("name", owner).build()
);
new Foo().doTheThing(github);
MatcherAssert.assertThat(
github.issues().get(1).comments().iterate(),
Matchers.not(Matchers.emptyIterable())
);
}
}
这比通过Mockito或类似的框架进行传统的模拟更方便和紧凑。
它基于JSR-353并使用jcabi-http
来处理HTTP请求。这种组合使得它具有高度的可定制性和可扩展性,当某些GitHub功能不被该库覆盖时(而且有很多这样的功能)。
例如,您想获取User
的hireable
属性的值。User.Smart
类没有相应的方法。所以,这是您获取它的方法:
我们正在使用json()
方法,该方法从JSR-353(Java7的一部分)返回一个JsonObject
实例。
没有其他库允许直接访问GitHub服务器返回的JSON对象。
让我们看另一个例子。假设你想使用GitHub的某个未在API中涵盖的功能。你可以从GitHub
接口获得一个Request
对象,并直接访问服务器的HTTP入口点。
jcabi-http HTTP客户端被jcabi-github使用。
所有类都是真正的不可变的,并且带有@Immutable
注解。这听起来可能是一个微小的好处,但对我来说非常重要。我在所有的项目中使用这个注解来确保我的类是真正的不可变的。
几天前我们发布了最新的版本0.8。这是一个重大更新,包含了超过1200个提交。它涵盖了整个GitHub API,并且应该非常稳定。该库作为一个JAR依赖项在Maven Central上发布(在Maven Central获取其最新版本)。
Translated by ChatGPT gpt-3.5-turbo/42 on 2023-11-28 at 15:32