我正在为VisualStudio寻找一个好的,功能齐全的C++断言宏.具有能够一次或永远忽略断言的功能,能够准确地破坏宏被调用的位置(而不是宏代码内部),并获得堆栈跟踪.
在我不得不蹲下来写一个之前,我想我会问是否有人知道那里有任何可用的东西.
有什么建议?
谢谢!
我的代码对"应该"正确的数据进行操作.但是在开发期间,我偶尔会获得无效数据.
当发生这种情况时,我想提出调试断言,如果用户选择继续,代码将过滤掉无效记录并继续操作"安全"数据.
// assert incorrect data
Debug.Assert(person.Items.All(item => item.IsValid), "Inconsistent data!");
// operate on filtered data
this.ItemViewModels = new ObservableCollection<ItemViewModel>(
person.Items
.Where(i =>item.IsValid) // Use only correct data
.Select(i => new ItemViewModel(lang, i)));
Run Code Online (Sandbox Code Playgroud)
当我选择对过滤后的数据进行操作时,我想对代码路径进行单元测试.
问题:有没有办法在单元测试中通过断言调用?
有些相当于点击OK=Continue"断言失败"对话框?
TIA
为什么断言通常不用于部署?我研究过断言公共方法参数是不合适的.但是在部署中断言私有方法参数是合适的.为什么?
我用一个会话连接到我的数据库.我在整个计划中总是使用相同的会话.我的线程"1"从数据库中捕获主数据.必须允许用户取消此线程.因此,如果用户经常或快速按下取消按钮(这是我的解释),则会发生以下错误:
ERROR org.hibernate.AssertionFailure - HHH000099: an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session)
org.hibernate.AssertionFailure: possible non-threadsafe access to the session
Run Code Online (Sandbox Code Playgroud)
如果我在我的线程"1"完成并尝试从数据库加载另一个主数据集后取消我在后台运行的线程"2",则会发生相同的错误.
我在两个线程中使用相同会话的失败是什么?
解决这个问题的正确方法是什么?
关于JUnit4 assertThat,我已经看到了这两种方式.一个是正确的还是一个都是正确的?
byte[] val;
...
assertThat(val, notNullValue());
--vs--
assertThat(val, is(notNullValue()));
Run Code Online (Sandbox Code Playgroud)
第二个选项是"断言val不为空",这听起来更好.(另一方面,它可能是多余的.)
我使用了两种方式,它们似乎产生了正确的结果.
场景: 我的一个测试用例是执行带有几个输入文件和特定输出的shell程序.我想测试这些输入/输出的不同变体,每个变体都保存在自己的文件夹中,即文件夹结构
/testA
/testA/inputX
/testA/inputY
/testA/expected.out
/testB
/testB/inputX
/testB/inputY
/testB/expected.out
/testC/
...
Run Code Online (Sandbox Code Playgroud)
这是我运行此测试的代码:
def test_folders(self):
tfolders = glob.iglob(os.environ['testdir'] + '/test_*')
for testpath in tfolders:
testname = os.path.basename(testpath)
self.assertTrue(self.runTest(testname))
Run Code Online (Sandbox Code Playgroud)
在这种情况下,testname是"testX".它inputs在该文件夹中执行外部程序,并将其与expected.out同一文件夹进行比较.
问题: 一旦它遇到失败的测试,测试就会停止并获得:
Could not find or read expected output file: C:/PROJECTS/active/CMDR-Test/data/test_freeTransactional/expected.out
======================================================================
FAIL: test_folders (cmdr-test.TestValidTypes)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\PROJECTS\active\CMDR-Test\cmdr-test.py", line 52, in test_folders
self.assertTrue(self.runTest(testname))
AssertionError: False is not true
Run Code Online (Sandbox Code Playgroud)
问题: 如何使其继续其余测试并显示失败的数量?(本质上是动态创建单元测试并执行它)
谢谢
我想有选择地避免用CKEDITOR.replaceAll替换textareas.我不能简单地使用替换.我必须使用文档中提到的自定义断言函数.
http://docs.ckeditor.com/#!/api/CKEDITOR-method-replaceAll
// Selectively replace <textarea> elements, based on custom assertions.
CKEDITOR.replaceAll( function( textarea, config ) {
// An assertion function that needs to be evaluated for the <textarea>
// to be replaced. It must explicitely return "false" to ignore a
// specific <textarea>.
// You can also customize the editor instance by having the function
// modify the "config" parameter.
} );
Run Code Online (Sandbox Code Playgroud)
但是assert在javascript中没有.断言的语法是什么?
在我的测试中,有很多期待.但其中一些可能不够严重,不能停止测试.我可以暂时忽略错误并在测试结束时抛出它们吗?
在Chai断言库中,我们可以断言存在的深层属性并具有值:
expect(obj).to.have.deep.property("field1.field2", 1);
Run Code Online (Sandbox Code Playgroud)
但是,如果我们需要断言该属性具有多个值之一怎么办?在这种情况下,如果obj具有的field1.field2属性值为0或1或2 ,则测试应通过。
仅供参考,我需要检查ESLint插件是否带有推荐的规则配置,该配置为每个规则配置了“警告级别”。警告级别可以是0、1或2个值。
我有一个关于Eclemma插件配置的问题:在生产代码中我有很多java核心断言,比如:
assert arr.size() == 2 : "message";
Run Code Online (Sandbox Code Playgroud)
当我在单元测试中运行Eclemma时,由于断言上的黄色标记,它显示低覆盖率.放置断言的想法不是有可能以断言的负面情况结束(它永远不会发生!),它们只是代码质量保护,仅此而已.但另一方面,Eclemma认为这些否定案例并未涵盖声明的分支(这是marazmatic :)),因此它将它们标记为黄色.
那么,问题是:如何配置Eclemma忽略覆盖率报告中的"断言"代码行?
assertions ×10
java ×3
javascript ×3
testing ×2
unit-testing ×2
assert ×1
assertion ×1
c# ×1
c++ ×1
chai ×1
ckeditor ×1
eclemma ×1
hibernate ×1
ignore ×1
jacoco ×1
jasmine ×1
junit ×1
junit4 ×1
protractor ×1
python ×1