gpt4 book ai didi

java - 如何将 node.js 合并到 java 测试中?

转载 作者:行者123 更新时间:2023-11-30 11:21:41 25 4
gpt4 key购买 nike

我在查看 Mercado Libre Java SDK 时注意到他们的存储库中有一个名为“mockapi”的文件夹。看起来他们已经用 javascript 编写了一个完整的模拟 api,用于测试他们的 Java 客户端。但是,我仍然不太明白它是如何工作的。我在下面发布了他们用来执行此操作的 app.js 中的部分 javascript。

var express = require('express');
var fs = require('fs');

var app = express.createServer();

app.configure(function(){
app.use(express.methodOverride());
app.use(express.bodyParser());
});

app.post('/oauth/token', function(req, res) {
if(req.query["grant_type"]=="authorization_code") {
if(req.query["code"]=="bad code") {
res.send({"message":"Error validando el parámetro code","error":"invalid_grant","status":400,"cause":[]}, 400);
} else if(req.query["code"]=="valid code without refresh token") {
res.send({
"access_token" : "valid token",
"token_type" : "bearer",
"expires_in" : 10800,
"scope" : "write read"
});
} else if(req.query["code"]=="valid code with refresh token") {
res.send({
"access_token" : "valid token",
"token_type" : "bearer",
"expires_in" : 10800,
"refresh_token" : "valid refresh token",
"scope" : "write read"
});
} else {
res.send(404);
}
} else if(req.query['grant_type']=='refresh_token') {
if(req.query['refresh_token']=='valid refresh token') {
res.send({
"access_token" : "valid token",
"token_type" : "bearer",
"expires_in" : 10800,
"scope" : "write read"
});
}
}
});

app.listen(3000);

fs.writeFileSync('/tmp/mockapi.pid', process.pid);

此外,在查看了他们的文件 package.json 之后,他们似乎正在使用 node.js。该文件在下面列出。

{
"name": "mockapi",
"version": "1.0.0",
"dependencies": {
"express" : "2.5.x"
},
"engine": "node ~> 0.8.x"
}

但是,在查看了他们的 pom 文件之后,他们似乎并没有将 Node 作为依赖项。我主要从事 Java 开发,因此服务器端 Javascript 对我来说仍然很陌生。这是如何工作的?为什么他们不必在 POM 文件中包含依赖项?我还应该注意到,大多数测试都失败了,因为我无法与 localhost:3000 建立连接。我是否必须安装 node.js 才能运行测试?

编辑:我添加了 Junit 测试来测试下面的帖子以及其他一些测试

package com.mercadolibre.sdk;

import java.io.IOException;

import org.junit.Assert;
import org.junit.Test;

import com.ning.http.client.FluentStringsMap;
import com.ning.http.client.Response;

public class MeliTest extends Assert {
@Test
public void testGetAuthUrl() {
assertEquals(
"https://auth.mercadolibre.com.ar/authorization?response_type=code&client_id=123456&redirect_uri=http%3A%2F%2Fsomeurl.com",
new Meli(123456l, "client secret")
.getAuthUrl("http://someurl.com"));
}

@Test(expected = AuthorizationFailure.class)
public void testAuthorizationFailure() throws AuthorizationFailure {
Meli.apiUrl = "http://localhost:3000";

new Meli(123456l, "client secret").authorize("bad code",
"http://someurl.com");
}

@Test
public void testAuthorizationSuccess() throws AuthorizationFailure {
Meli.apiUrl = "http://localhost:3000";

Meli m = new Meli(123456l, "client secret");
m.authorize("valid code with refresh token", "http://someurl.com");

assertEquals("valid token", m.getAccessToken());
assertEquals("valid refresh token", m.getRefreshToken());
}

@Test
public void testGetWithRefreshToken() throws MeliException, IOException {
Meli.apiUrl = "http://localhost:3000";

Meli m = new Meli(123456l, "client secret", "expired token",
"valid refresh token");

FluentStringsMap params = new FluentStringsMap();
params.add("access_token", m.getAccessToken());
Response response = m.get("/users/me", params);

assertEquals(200, response.getStatusCode());
assertFalse(response.getResponseBody().isEmpty());
}

public void testPost() throws MeliException {
Meli m = new Meli(123456l, "client secret", "valid token");

FluentStringsMap params = new FluentStringsMap();
params.add("access_token", m.getAccessToken());
Response r = m.post("/items", params, "{\"foo\":\"bar\"}");

assertEquals(201, r.getStatusCode());
}

最佳答案

对您的问题的简短回答是,是的,您需要安装 Node ,并使其在您的路径中可用,以便测试运行。这就是您无法在 3000 上建立连接的原因。

您对“不确定它是如何工作的”的评论 - 简短的回答是在 Node 中运行的 javascript 代码本身就是一个网络服务器。 Node 不是您习惯使用 Tomcat、Glassfish 等方式的容器。一般来说,您在上面粘贴的 Javascript 代码使用 Express(最广泛使用的 Node Web 框架,连同 Connect为您提供 Servlet API 所做的事情)。创建的服务器响应单一类型的请求,POST 到 /oauth/token

关于java - 如何将 node.js 合并到 java 测试中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22122365/

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