英文:
How to test a Oauth2.0 resource of server
问题
我想编写一个测试来验证正确的文档是否可以访问第三方服务器的Oauth2.0,我应该如何完成伪代码?
import (
"net/http"
"net/http/httptest"
"net/url"
"strings"
"testing"
)
func testAuthServer(t *testing.T) {
form := url.Values{}
form.Set(...)
r := httptest.NewRequest(http.MethodPost, authUrl, strings.NewReader(form.Encode()))
r.Header.Set("Content-Type", "application/x-www-form-urlencoded")
w := httptest.NewRecorder()
// 测试认证服务器
if w.Code != http.StatusOK {
...
}
}
请注意,这只是一个伪代码示例,你需要根据你的具体情况进行适当的修改和完善。
英文:
I want to code the test for validate the right document to reach to the Oauth2.0 of third party server, how should i complete the pseudocode?
import (
"net/http"
"net/http/httptest"
}
func testAuthServer(t *testing.T) {
form := url.Values{}
form.Set(...)
r := httptest.NewRequest(http.MethodPost, authUrl, strings.NewReader(form.Encode()))
r.Header.Set("Content-Type", "application/x-www-form-urlencoded")
w := httptest.NewRecorder()
// test the auth server
if w.Code != http.StatusOK {
...
}
}
答案1
得分: 1
你可以依赖第三方库来模拟资源。你可以查看 gock
。
func TestServer(t *testing.T) {
defer gock.Off()
authURL := "http://third-party-resource.com"
form := url.Values{}
form.Add("foo", "bar")
// 创建第三方资源的模拟。我们断言代码会使用POST请求调用该资源,并将请求体设置为"foo=bar"
gock.New(authURL).
Post("/").
BodyString("foo=bar").
Reply(200)
r, err := http.NewRequest(http.MethodPost, authURL, strings.NewReader(form.Encode()))
if err != nil {
t.Fatal(err)
}
r.Header.Set("Content-Type", "application/x-www-form-urlencoded")
c := http.Client{}
_, err = c.Do(r)
if err != nil {
t.Fatal(err)
}
if !gock.IsDone() {
// 模拟未被调用。
t.Fatal(gock.GetUnmatchedRequests())
}
}
英文:
You can rely on a third party library to mock the resource. You can take a look at gock
.
func TestServer(t *testing.T) {
defer gock.Off()
authURL := "http://third-party-resource.com"
form := url.Values{}
form.Add("foo", "bar")
// Create the mock of the third-party resource. We assert that the code
// calls the resource with a POST request with the body set to "foo=bar"
gock.New(authURL).
Post("/").
BodyString("foo=bar").
Reply(200)
r, err := http.NewRequest(http.MethodPost, authURL, strings.NewReader(form.Encode()))
if err != nil {
t.Fatal(err)
}
r.Header.Set("Content-Type", "application/x-www-form-urlencoded")
c := http.Client{}
_, err = c.Do(r)
if err != nil {
t.Fatal(err)
}
if !gock.IsDone() {
// The mock has not been called.
t.Fatal(gock.GetUnmatchedRequests())
}
}
答案2
得分: 0
最后我使用普通的HTTP客户端解决了这个问题。
import (
"net/http"
}
func testAuthServer(t *testing.T) {
form := url.Values{}
form.Set(...)
authReq := http.NewRequest(http.MethodPost, authUrl, strings.NewReader(form.Encode()))
authReq.Header.Set("Content-Type", "application/x-www-form-urlencoded")
authClient, _ := http.Client{}
authResp, _ := authClient.Do(authReq)
if authResp.Code != http.StatusOK {
...
}
}
英文:
Finally i use the normal http client to resolve this problem.
import (
"net/http"
}
func testAuthServer(t *testing.T) {
form := url.Values{}
form.Set(...)
authReq := http.NewRequest(http.MethodPost, authUrl, strings.NewReader(form.Encode()))
authReq.Header.Set("Content-Type", "application/x-www-form-urlencoded")
authClient, _ := http.Client{}
authResp, _ := authClient.Do(authReq)
if authResp.Code != http.StatusOK {
...
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论