하는 부분이 있다. image pull 까지는 정상적으로 되지만 run 이 되지않는 현상이 발생하였다.
해당 오류 메시지는
TasksAccounting, or unknown property
이게 도대체 무엇이란 말인가.... 현재 정리하지 말고 끄젹여 보자면 단순하게 centos 가 오래된 버전을 사용하고 있어서 이기 때문입니다.
sudo -s yum update - > 후 docker container run 시 정상적으로 동작합니다.
Windows 10
책은 윈도우즈 / mac 기준으로 되어있기 때문에 실습 환경을 다시 구성했습니다. ( 더 확실한 이유는 현재 NBP MicroServer를 사용하고있는데 도커로 9000 포트를 열어놓고 다른 포트로 확인시에는 포트포워딩이 부족하여 공인 IP를 새로 할당 받은 후 포트포워딩을 추가적으로 해줘야 할 것으로 보여 - 추가금 발생) 해당은 도커에 대해 조금 능숙해지고 웹 페이지가 어느정도 만들어 졌을 때 직접 사서 다시 환경을 구축하려고 합니다.
5개의 TC(Test Case)가 있습니다. 테스트 방식은 직접하는 매뉴얼 테스트도 있을 것이고 성능,부하 등등
여러가지가 있지만 말씀드리고자 하는 부분은 단순 Unit Test 혹은 API 테스트 같은 부류들 처럼 코드단에서
이루어지는 부류를 말씀 드리고자 합니다.
예전에 제가 사용 하였던 2가지의 패턴 방식을 보여드리려고 합니다. 현재는 또 이러 저러한 구조를 통해서 변경
하고 있습니다.
독립적 실행이 필요한가?
어떠한 프로그램에 따라서는 아닐수도 있고 맞을수도 있습니다. 저같은 경우는 JS 로 돌아가는 환경이 최근에 많았었는데요 JS의 경우는 .js파일을 읽어들이면서 코드라인이 실행됩니다. JIT(Just In Time) 라고도 하죠 그렇기 때문에 어떠한 현상이 발생되는 현상은
위와 같은 문제가 발생하게 됩니다. TestCase를 3개를 만들었지만 2번째 케이스로 인해서 3번째 케이스가 돌지 못하는 현상이 발생하게 되는 것이지요
1차적으로 간단하게 수정할수 있습니다.
function a(){
console.warn('Success');
}
function b(){
try{
var test = "";
test.push('test'); // Error
}
catch(err){
console.log(err);
}
}
function c(){
// not Execution
console.warn('function C Success');
}
a();
b();
c();
try catch 로 묶어 주게되면
문제없이 catch 로 핸들링이 되며 다음코드로 자동으로 넘어가게 되겠죠
하지만 실제로 업무에서 사용되는 케이스는 10단위도 아니고 100단위도 아니고 1000단위가 넘어가게됩니다.
코드 단에서 할수 있다면 최대한 많은 케이스를 확보 하여 커버리지를 올릴 수 있기 때문이죠
1. TC(TestCase) 내용으로 함수 연결하여 실행하기
TC(TestCase)의 경우 유니크한 값을 가지기 마련입니다. 함수명을 해당 키 값으로 하여서 실행시키는 방법입니다.
var testRepo = [
{tc:"a",contents:"a를 테스트합니다.",result:"block"},
{tc:"b",contents:"b를 테스트합니다.",result:"block"},
{tc:"c",contents:"c를 테스트합니다.",result:"block"},
]
var testFunctionRepo = {
run:function(repo){
var _this = this;
repo.forEach(function(item,index){
try{
_this[item.tc]();
}
catch(error){
console.error(error);
}
});
},
a:function(){
console.warn('Success');
},
b:function(){
var test = '';
test.push('test'); // Error
},
c:function(){
// not Execution
console.warn('function C Success');
}
}
testFunctionRepo.run(testRepo);
결과 :
tc에서 만들어진 유니크한 값을 통해서 함수를 작성해놓았습니다.
그후엔 run 이라는 함수를 하나 만들어서 해당 함수에서 tcRepo 를 직접 순환시에 나오는 유니크 값을 함수를 불러와서 실행을 하는 구조입니다. 그렇기 때문에 try catch 문은 하나만 있을수 있죠
위에서는 테스트를 변경하진 않았는데 해당의 내용도 가능합니다.
2. TC(TestCase) 내용에 함수가 들어있는 경우
이번에는 Repo 안에 함수가 들어있는 경우입니다.
var testRepo = [
{tc:"a",contents:"a를 테스트합니다.",result:"block",run:function(){
console.warn('Success');
}},
{tc:"b",contents:"b를 테스트합니다.",result:"block",run:function(){
var test = '';
test.push('test'); // Error
}},
{tc:"c",contents:"c를 테스트합니다.",result:"block",run:function(){
// not Execution
console.warn('function C Success');
}},
]
function run(repo){
if(repo && repo.length===0){
return ;
}
repo.forEach(function(item,index){
try{
item.run();
}
catch(error){
console.error(error);
}
});
}
run(testRepo);
위에 있는 경우와 조금 다른 케이스입니다. Repo 안에 직접 run 이라는 함수를 직접 내장 하였는데요
Repo 안에 전부 있기 때문에 run 을 오브젝트를 통해서 실행할 필요는 없어 보여 run 함수를 따로 작성 하였습니다.
이렇게 2가지를 알아보았는데 해당 방식을 놓고 보면 좋아 보이는거 같기도하고 하지만
기본적인 방법입니다. 뭔가 더 정형화되거나 확장성에는 용이 하지 않죠
여러명이 작업할때 좀 더 모듈단위 로 세분화가 되거나 하여야 할 것으로 보입니다. 이부분에 대해서는
이와 같이 말이죠 이렇게 한번에 된다면 정말 좋겠지 만요 QT는 5.5 이후로 webView가 빠져있습니다.
두둥... 그렇습니다. qmake 사용시 Unkown Module(s) webkit 을 보게 됩니다.
5.9 버전에서는 webView가 없기 때문에 마찬가지로 QTCreator에서도 WebView는 존재하지 않습니다.
그래서 동작하지 않게 되는데 webkit을 깔거나 이것저것 여러가지 시도를 해보았지만 webkit을 따로 붙이는 작업을
하다가 더 빨리 웹뷰를 띄워야 한다는 요청이 있었어서 5.9.X Documentation QT를 들어가서 확인해 보니
webEngine을 이용한 방법이 있었습니다.
Main.cpp
#include <QWebEngineView>
#include <QApplication>
#include <QUrl>
int main(int argc, char ** argv){
QApplication app(argc,argv);
QWebEngineView *view = new QWebEngineView();
view->setZoomFactor(0.7); // 배율 조정 API 테스트 를 편하게 하기 위해 추가
view->load(Qurl("테스트 url"));
view->show();
return app.exec();
}
MainSample.pro
QT += webenginewidgets widgets core gui
...
실행 결과
** 포스팅에서 제외된 부분
필요한 Module들에 대한 에러 메시지가 나타날 경우 해당 관련 제품들을 설치 하였습니다.