如何从点更改cppunit的输出,指示对测试的实际名称进行了多少次测试,或者至少只是给测试调用者的字符串,如计算点和猜测哪些测试 - 它所代表的功能是非常无效的,如果是分段错误,它实际上会杀死整个程序.我确实找到了在断言失败的情况下更改错误输出的参考,但在一般输出上没有任何内容.
我的Testclass的套件功能:
static CppUnit::Test *suite() {
CppUnit::TestSuite *suiteOfTests = new CppUnit::TestSuite( "Map Parser" );
//string to state
suiteOfTests->addTest( new CppUnit::TestCaller<Parser_test>("string to state I",&Parser_test::test_string_to_state_I));
....
return suiteOfTests;
}
Run Code Online (Sandbox Code Playgroud)
Main.cpp的
CppUnit::TextUi::TestRunner runner;
runner.addTest( Parser_test::suite() );
runner.run();
Run Code Online (Sandbox Code Playgroud)
我希望有这样的输出:
string to state I : OK
string to state II : OK
...
Run Code Online (Sandbox Code Playgroud)
然后,我能够确定程序何时由于不可捕获的异常(如SegFault)而崩溃.
但此刻我的ouptut看起来像这样:
...........
Segmentation fault
Run Code Online (Sandbox Code Playgroud) 我目前正在试用 HtmlUnit。我想填写一个表格,然后提交。但这会导致错误,这似乎是由无法访问的文件引起的,从而导致连接重置被抛出。我怎样才能抑制这一点,因为考虑到整个网站的加载过程,这并不重要?不过,它似乎不会影响程序,我只是想让它静音。
Apr 05, 2012 12:25:13 PM com.gargoylesoftware.htmlunit.html.HtmlPage loadExternalJavaScriptFile
Schwerwiegend(severe): Error loading JavaScript from [*link*].
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:149)
at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:110)
at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:264)
at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:98)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:252)
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:281)
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:247)
at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:219)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:298)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:645)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:464)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:776)
at com.gargoylesoftware.htmlunit.HttpWebConnection.getResponse(HttpWebConnection.java:152)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1439)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1358)
at com.gargoylesoftware.htmlunit.html.HtmlPage.loadJavaScriptFromUrl(HtmlPage.java:1008)
at com.gargoylesoftware.htmlunit.html.HtmlPage.loadExternalJavaScriptFile(HtmlPage.java:950)
at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:349)
at com.gargoylesoftware.htmlunit.html.HtmlScript$1.execute(HtmlScript.java:230)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.doProcessPostponedActions(JavaScriptEngine.java:642)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.access$400(JavaScriptEngine.java:79)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:590)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:537)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:538)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:499)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:474) …Run Code Online (Sandbox Code Playgroud) 我通过一个使用必要参数调用sbcl的shellscript来调用我的common-lisp程序,我必须保证无论如何实际程序完成调用都会以some/none输出结束.
我目前的解决方案如下:
sbcl --eval "(unwind-protect
(handler-case
(progn
(declaim #+sbcl(sb-ext:muffle-conditions style-warning))
(let ((*standard-output* (make-broadcast-stream)))
(ql:quickload \"module\"))
(eval (read-from-string \"(package:start)\"))) ;this starts the program
(error (err)
(FORMAT t \"Something went really wrong:~a~%\" err)
(sb-ext:exit)))
(sb-ext:exit))"
Run Code Online (Sandbox Code Playgroud)
但在以下两个szenarios它不会工作:
sbcl --eval "(unwind-protect
(handler-case
(progn
(define-condition bad () ())
(error 'bad))
(error (err)
(FORMAT t \"Something went really wrong:~a~%\" err)
(sb-ext:exit)))
(sb-ext:exit))"
sbcl --eval "(unwind-protect
(handler-case
(progn
(labels ((rek () (rek)))
(rek)))
(error (err)
(FORMAT t \"Something went really wrong:~a~%\" err)
(sb-ext:exit)))
(sb-ext:exit))"
Run Code Online (Sandbox Code Playgroud)
我现在想知道是否有另一种解决方案可以捕获被调用程序的任何可能结果并确保sbcl调用将退出干净?
对于第一种情况,一般情况下没有指明要捕获的东西,可能会做出这笔交易.第二种情况必须能够处理导致低级别debuger被调用的错误/错误.
我写了以下几行:
std::bitset<4> bitvec; //bitset 0000
std::bitset<4> addition; //bitset 0000
addition.set(0); //setting the least significant bit
std::cout << addition << std::endl; //output 0001
std::cout << std::endl;
for(int x = 0; x != 16; ++x) { //addition loop
std::cout << bitvec << std::endl; //output
bitvec &= addition; //binary AND
}
std::cout << std::endl;
Run Code Online (Sandbox Code Playgroud)
我期望输出为:
0000
0001
0010
0011
0100
0101
....
Run Code Online (Sandbox Code Playgroud)
但循环只输出'0000'.我错过了什么基本概念?
我用的SHGetSpecialFolderPath是WINAPI的功能,也是用windows VisualExpressC++编译器(cl.exe)来编译的。但是在链接阶段时,我收到此错误:
error LNK2019: unresolved external symbol __imp___SHGetSpecialFolderPathA@16 referenced in function _main
Run Code Online (Sandbox Code Playgroud)
我想我需要链接Shell32.lib,这是正确的,我将如何做到这一点,让我的程序在另一个系统上运行,甚至可能是 XP 而不是 7,而无需重新编译它?
this一个班级的自我引用的正确用法是什么?
我有时在一个方法中使用它来清除所使用的变量是一个成员变量而不是在方法中声明的变量,但另一方面我想知道这是否是一个很好的理由,因为我认为你应该总是代码(和注释)以一种自我解释的方式,因此会不必要地使用this不必要的和另一个原因来反对它,那就是你实际上生成了比需要更多的代码.
void function() {
while(i != this->length) //length is member var
/*do something*/
}
Run Code Online (Sandbox Code Playgroud)
我经常遇到的另一种使用它的方法是内部构造函数(主要是Java),因为参数确实与必须初始化的成员变量具有相同的名称.由于Primer声明这是坏代码,我不这样做,但另一方面,我看到使用与member-vars相同的名称作为参数名称清除了它们的用途.
C++
Constructor::Constructor(int size,int value) : this->size(size),
this->value(value) {};
Java
Constructor(int size,int value) {
this->size = size;
this->value = value;
}
Run Code Online (Sandbox Code Playgroud)
我希望实际上有一个规则考虑两种语言(Java/c ++),如果不是我会重新考虑c ++,因为这是我更感兴趣的.
我正在尝试下载并保存PDF,但在使用EOF-Error写入时失败.这样做的正确方法是什么?
(with-open-file (file "/home/*/test.pdf"
:direction :io
:if-does-not-exist :create
:if-exists :supersede
:element-type '(unsigned-byte 8))
(let ((input (drakma:http-request "http://www.fractalconcept.com/ex.pdf"
:want-stream t)))
(awhile (read-byte input)
(write-byte it file))
(close input)))
Run Code Online (Sandbox Code Playgroud) 我正在使用sbcl 1.0.57.0并且想要启动一个程序,通过--eval该程序应该生成一些输出,但是如果存在未被捕获的错误,它将退出.
我认为最简单的方法是使用unwind-protect:
(unwind-protect (error 'simple-error)
(progn (FORMAT t "IAMREACHED~%") (sb-ext:exit)))
Run Code Online (Sandbox Code Playgroud)
至于(sb-ext:exit)应executet柜面有未被捕获的错误.
但事实并非如此!
* (unwind-protect (error 'simple-error)
(progn (FORMAT t "IAMREACHED~%") (sb-ext:exit)))
debugger invoked on a SIMPLE-ERROR in thread
#<THREAD "main thread" RUNNING {1002979193}>:
(A SIMPLE-ERROR was caught when trying to print *DEBUG-CONDITION* when entering
the debugger. Printing was aborted and the SIMPLE-ERROR was stored in
SB-DEBUG::*NESTED-DEBUG-CONDITION*.)
Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name): …Run Code Online (Sandbox Code Playgroud) 基本上我会说你必须使用(typep var 'string-type),但据我所知,没有像字符串这样的类型.
通过类型结果确定类型
(type-of "rowrowrowyourboat")
> (SIMPLE-ARRAY CHARACTER (17))
Run Code Online (Sandbox Code Playgroud)
这是一种我能用通用方式寻找的类型,因为寻找SIMPLE-ARRAY不会有任何好处:
(typep "rowrowrowyourboat" 'simple-array)
> t
(typep (make-array 1) 'simple-array)
> t
Run Code Online (Sandbox Code Playgroud)
并且使用直观的动态确定示例字符串类型的hack也没有任何好处,因为它们的长度不一样(大多数时候)
(typep "rowrowrowyourboat" (type-of "string"))
> nil
Run Code Online (Sandbox Code Playgroud)
所以我想知道检查给定变量是否为string类型的规范方法是什么?