我怀疑一些ASSERTION代码有副作用.我想关闭ASSERT,而不对我的代码编译方式进行任何其他更改.我正在使用MSVS2008.从调试切换到发布不会这样做会改变内存的初始化方式.
我正在使用Visual Studio 2010编写.NET断言:
Debug.Assert(false, "Testing Debug.Assert");
Run Code Online (Sandbox Code Playgroud)
当我在这行代码上放置一个断点时,等到断点到达,然后让程序继续运行,一切正常:弹出"断言失败"对话框.但是,当我删除断点并重新运行应用程序时,将忽略Debug.Assert()语句.
有谁知道什么可能导致这种非常奇怪的行为?
我正在检查三个字符的字符串
Assert.AreEqual(myString.Substring(3,3), "DEF", "Failed as DEF was not observed");
Run Code Online (Sandbox Code Playgroud)
事情就在这里它可以DEF或者RES,现在要处理这个我能想到的是以下内容
bool check = false;
if( myString.Substring(3,3) == "DEF" || myString.Substring(3,3) == "RED" )
check = true;
Assert.IsTrue(check,"Failed");
Console.WriteLine(""Passed);
Run Code Online (Sandbox Code Playgroud)
有没有办法可以在Assert中使用一些OR事物
ps我正在编写单元测试,是的,我将使用三元运算符代替....
我的代码是
<h3 id="account_owner">This is Jhon's account</h3>
Run Code Online (Sandbox Code Playgroud)
测试此代码的行是
assert_select "h3#account_owner", "This is Jhon's account"
Run Code Online (Sandbox Code Playgroud)
测试失败并说
"这是Jhon的帐户"是预期的但是这是Jhon' s account'
我在"'"之间加了一个空格.因为它也转化为'在这个问题的输出上.有什么猜测?或者我该如何测试这条线?
我是minitest的新手,对红宝石来说仍然是新人,并且真的厌倦了试图谷歌这个问题没有结果.我真的很感激你的帮助:
ruby minitest中assert_output的确切语法是什么?
我在github或其他地方找到的所有内容似乎都使用括号.然而,当我不使用带有assert_output的块时,我收到一条错误消息,这是有意义的,因为此方法的定义包含yield语句.
但无论我尝试什么,我都无法使它发挥作用.
testclass.rb
class TestClass
def output
puts 'hey'
end
end
Run Code Online (Sandbox Code Playgroud)
test_test.rb
require 'minitest/spec'
require 'minitest/autorun'
require_relative 'testclass'
class TestTestClass < MiniTest::Unit::TestCase
def setup
@test = TestClass.new
end
def output_produces_output
assert_output( stdout = 'hey' ) { @test.output}
end
end
Run Code Online (Sandbox Code Playgroud)
我得到的是:
完成测试0.000000s,NaN测试/ s,NaN断言
0次测试,0次断言,0次失败,0次错误,0次跳过
我究竟做错了什么?它必须是一个非常明显的东西,但我无法弄清楚.谢谢你的帮助.
我正在使用 R 的assertthat 包,并且希望(暂时)在断言失败时输出警告而不是错误。使用assertthat 包最简单的方法是什么?
我意识到想要警告而不是错误有点违背了断言的用途。从长远来看,我们确实希望在断言失败时输出错误。从短期来看,我们仍然希望代码即使在输入错误的情况下也能运行,因为输入错误的输出目前仍然“足够好”。
一个简单的例子:假设我有一个函数,将 x 作为输入并输出 x+5。如果 x!=3 我想输出警告。由于我们最终将使用assert_that,因此如果我们可以使用assertthat 包来发出警告,那就太好了。
从长远来看,我们将使用这个:
> x <- 3
> fn <- function(x) {assert_that(x==3); return(x+5)}
> fn(3)
[1] 8
> fn(4)
Error: x not equal to 3
Run Code Online (Sandbox Code Playgroud)
从短期来看,这是我迄今为止最好的:
> fn <- function(x) {if(!see_if(x==3)) warning(validate_that(x==3)); return(x+5)}
> fn(3)
[1] 8
> fn(4)
[1] 9
Warning message:
In fn(4) : x not equal to 3
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我正在寻找更简洁的解决方案(最好的情况是将“output_warning”参数传递给assert_that,但我认为不存在)。
在这里,我将通过一个例子来解释这个问题.最初的问题更抽象地提出了问题.不需要阅读它.
让我们说我们已经实现了这个buggy函数来找到int []的min:
public int MyMin(int[] data)
{
int min = 1000;
for (int i = 1; i < data.Length; i++)
{
if (data[i] < min)
{
min = data[i];
}
}
return min;
}
Run Code Online (Sandbox Code Playgroud)
在这个函数上运行Intellitest给我们:

注意,对于测试#4和#6,该函数由于其错误实现而未正确计算最小值.但是,这些测试正在通过,这是不希望的.
Intellitest不能神奇地确定我们的预期行为,MyMin并使测试失败.但是,如果我们可以手动指定这些测试的所需结果,那将是非常好的.
@michał-komorowski的解决方案是可行的,但对于每个测试用例,我必须重复其输入的PexAssumes.是否有更加优雅/干净的方式来为测试输入指定所需的输出?
Intelitest生成可修改的参数化测试,并可在其中添加通用/全局断言.它还生成最大数量的输入,以最大化代码覆盖率.Intellitest将输入存储为单独的单元测试,每个测试都使用精心设计的输入调用参数化测试.
我正在寻找一种方法来为每个输入添加断言.
由于每个输入都作为单元测试函数存储在.g.cs文件中,因此可以在那里添加断言.问题是这些功能不应由用户自定义,因为它们将在后续运行中被Intellitest覆盖.
为每个单元测试添加断言的推荐方法是什么?
我已Map声明如下:
Map<String, Object> data
Run Code Online (Sandbox Code Playgroud)
我把String它放进去并验证它的价值如下:
assertEquals("value", data.get("key"));
Run Code Online (Sandbox Code Playgroud)
现在,我想重写验证assertThat而不是使用assertEquals.我尝试过以下方法:
assertThat(data.get("key"), equalTo("value"));
Run Code Online (Sandbox Code Playgroud)
当然,由于类型不匹配,它不起作用:
Wrong 2nd argument type. Found: 'org.hamcrest.Matcher<java.lang.String>', required: 'org.hamcrest.Matcher<? super java.lang.Object>' less...
第一个参数的显式类型转换有String帮助,但我想避免它.例如assertEquals,不需要类型转换.那么,如何使用该方法检查Map上面声明的放入对象的值是否等于特定值?StringassertThat
我知道有一些实用程序可以测试API请求和响应与Java或PHP语言中的swagger定义(如SwaggerAssertions)相匹配,但我需要在C#中使用类似的东西在.NET平台中使用.
我一直在寻找类似于我的招摇定义的东西,但我找不到任何实用工具.你知道吗?C#中是否有任何库允许使用JSON模型作为参数进行断言?
非常感谢你!
我正在使用Rubberduck对我的VBA实现进行单元测试.当Assert.IsTrue在一个TestMethod中使用相同类型的多个Assert(例如)时,测试结果并没有告诉我哪个失败,据我所见.
有没有办法找出哪个Assert失败或者这是在Rubberduck未来路线图上?当然我可以添加自己的信息,例如Debug.Print在每个Assert之前使用,但这会导致很多额外的代码.
我知道在一次测试中对于多个Assert有不同的看法,但我选择在我的情况下使用它们,这个讨论已经在其他地方讨论过了 .
assertions ×10
unit-testing ×4
c# ×3
.net ×2
minitest ×2
android ×1
assertthat ×1
c++ ×1
debugging ×1
intellitest ×1
java ×1
junit ×1
r ×1
rubberduck ×1
ruby ×1
swagger ×1
vba ×1
vbe ×1