정보
지난 주 회의에서 동료들은 현재 Java를 사용하여 함수 테스트를 작성하고 있는데 이로 인해 중복된 코드가 많이 생성되고 전체 프로젝트가 부풀어 오른다고 말했습니다. 이제 기능 테스트를 빠르게 구축하려면 간단한 템플릿 프로젝트가 시급히 필요합니다.
나중에 생각해보니 왜 함수 테스트를 자바로 해야 하는 걸까요?
Node.js가 좋은 선택이겠고, json도 자연스럽게 지원해서 github에 검색해 보니 정말 관련 프로젝트인 테스토스테론이 있어서 이 블로그를 하게 되었습니다.
서버
데모를 하려면 이를 지원하는 해당 서버가 있어야 합니다.
여기에서는 Express를 서버로 선택합니다.
먼저 서버 폴더를 만들고 새 package.json을 만듭니다.
다음 실행 명령
이제 Express가 설치되었습니다.
실험을 위해 몇 가지 간단한 get post 메소드를 구현했습니다
app.use(express.bodyParser());
app.get('/hello', function(req, res) {
res.send("hello world");
});
app.get('/ ', function (req, res) {
setTimeout(function () {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end() ;
}, 200);
});
app.get('/hi', function (req, res) {
if (req.param('hello') !== 정의되지 않음) {
res.writeHead(200, {'Content -Type': 'text/plain'});
res.end('Hello!');
} else {
res.writeHead(500, {'Content-Type': 'text/ plain'});
res.end('대신 게시물 사용');
}
});
app.post('/hi', function (req, res) {
setTimeout(function () {
res.writeHead(200, {'Content-Type': 'text/plain'} );
res.end(req.param('message') || 'message');
}, 100);
});
app.get('/user', function(req, res) {
res.send(
[
{이름:'jack'},
{이름: '톰'}
]
);
});
app.get('/user/:id', function(req, res) {
res.send({
id: 1,
name: "node js",
설명: "나는 노드 js입니다."
});
});
app.post('/user/edit', function (req, res) {
setTimeout(function () {
res.send({
id:req.param('id' ),
status:1
});
}, 100);
})
app.listen(3000);
console.log('포트 3000에서 수신 중) ...');
테스토스테론
서버를 세팅한 후 테스트를 시작하는 것은 당연합니다.
이 프로젝트의 인터페이스는 이름이 매우 우아하며 코드에 직접 로드될 수 있습니다.
먼저 기본 기능 테스트
테스토스테론
.get('/hello',function(res){
assert.equal(res.statusCode, 200);
})
.get('/hi',function(res){
assert.equal(res.statusCode, 500);
})
.post('/hi', {data: {message: 'hola'}}, {
status: 200
,body: 'hola'
});
그런 다음 위에서 시뮬레이션한 사용자의 게시물 가져오기에 대해 간단한 테스트를 수행합니다.
테스토스테론
.get('/user', function (res) {
var ExpectRes = [
{name:'jack'},
{name:'tom'}
];
assert.equal(res.statusCode, 200);
assert.equal(JSON.stringify(JSON.parse(res.body)),JSON.stringify(expectRes));
})
.get('/user/1', function (res) {
var user = JSON.parse(res.body);
assert.equal(res.statusCode, 200);
assert.equal(user.name, "node js");
assert.equal(user.description, "나는 nodejs입니다");
})
다음으로, 각 테스트 사례를 설명하기 위해 give when then을 사용하려면 다음과 같이 하면 됩니다.
testosterone
.add(
'/user/{id} n에게 사용자 ID를 부여했습니다.'
'사용자 n 응답이 있는 경우'
'그러면 사용자 json을 반환해야 합니다.',
함수(cb) {
testosterone.get('/user/1', cb(function (res) {
var ExpectRes = {
id: 1,
name: "node js",
설명: "나는 node js입니다."
};
assert.equal(res.statusCode, 200);
assert.equal(JSON.stringify(JSON.parse(res.body)), JSON.stringify(expectRes));
}));
})
.add(
'/user/edit n에 사용자 정보를 POST로 제공'
'수정 성공 n을 찾을 때'
'그러면 상태 1을 반환해야 합니다.',
function (cb) {
testosterone.post('/user/edit', {data: {id: 1, name: "change name"}}, cb(function (res) {
var res = JSON.parse(res.body);
assert.equal(res.status, 1);
}));
}
)
.run(function () {
require('sys').print('done!');
});
결론
위의 코드를 통해 실제로 Java의 긴 http 헤더 설정보다 테스토스테론이 훨씬 간단하고 우아하다는 것을 알 수 있습니다.