这会发生吗?3断言,其中一个应该激活.
int nr = perform_calc();
assert( nr == 0);
assert( nr > 0);
assert( nr < 0);
Run Code Online (Sandbox Code Playgroud)
如果程序没有在g ++ 3.4.4上激活断言,是否会出现这种情况.
并且我没有可能更改代码以便在断言未激活的情况下打印数字.
有任何想法吗?
编辑:在阅读了几条评论后,我被迫编辑.显示代码?你为什么要做这个蠢事?我不相信!在哪里使用?从我的问题来看,显然我不会发布/更改代码,原因有以下几种:
如果你认为我是恶作剧或恶作剧你应该投票支持关闭线程.我会完全没问题.但是添加这样的不必要的评论只会让我想要一个"态度"的标志来实现.
我要感谢其他人的意见和答案,他们实际上试图解释并回答我的问题.
考虑以下服务接口:
public interface IServiceA
{
void DoSomething(string s);
void DoSomething(string s, bool b);
}
public interface IServiceB
{
void DoSomething();
}
Run Code Online (Sandbox Code Playgroud)
IServiceB的实现取决于IServiceA,如下所示:
public class ServiceB : IServiceB
{
private IServiceA _serviceA;
public ServiceB(IServiceA serviceA)
{
_serviceA = serviceA;
}
public void DoSomething()
{
_serviceA.DoSomething("Hello", true);
}
}
Run Code Online (Sandbox Code Playgroud)
就是 依赖项被注入到构造函数中。
现在考虑对该DoSomething()方法进行单元测试。我想断言,调用了IServiceA中的一种重载DoSomething方法,但是遵循一个普遍的原则,即单元测试对所测试方法的内部工作不应该了解太多,我希望与哪一个无关。称为两个重载。考虑以下单元测试:
[TestFixture]
public class ServiceBTests
{
[Test]
public void DoSomething_CallsServiceA()
{
var serviceAMock = MockRepository.GenerateMock<IServiceA>();
var service = new ServiceB(serviceAMock);
service.DoSomething();
// Problem: How to check if EITHER:
serviceAMock.AssertWasCalled(s …Run Code Online (Sandbox Code Playgroud) 我写了一个方法Assert():
[System.Diagnostics.Conditional("DEBUG")]
internal static void Assert(bool condition)
{
if (!condition)
{
var message =
"Line:" + (new System.Diagnostics.StackFrame(1)).GetFileLineNumber() + "\r\n" +
"Column:" + (new System.Diagnostics.StackFrame(1)).GetFileColumnNumber() + "\r\n" +
"Where:" + (new System.Diagnostics.StackFrame(1)).GetMethod().Name;
Log("ASSERTION", message);
}
}
Run Code Online (Sandbox Code Playgroud)
为什么触发时我的行和列都等于0?它应该是调用Debug.Assert(false)的地方.
问候,
我想写assert语句但不会中止该程序.所以也许使用与assert()完全相同的语法,但称为expect().当然我可以编写自己的,但断言非常聪明(例如,它不仅知道文件和行号,而且甚至知道不是TRUE的表达式).我当然可以深入了解库和Cv/Cc解决方案.但这是一个非常明显的通用请求,我无法相信已经没有一个好的解决方案了.这当然应该很容易找到...
我在Delphi中有一些代码,它们都有Assert语句.我知道有一个编译器指令{$C-},但有太多的单位要添加它.有没有办法让编译器命令行或dpr文件中的某个地方完成它?
在我正在运行的一系列测试中nosetests,assertEqual(a,b)失败,a并且b(相当长的字符串)被逐字打印填充屏幕,混淆了其他所有内容.您可以通过将其添加到您的一个测试用例来创建类似的情况:
def test_my_long_strings(self):
self.assertEqual('a'*5000, 'b'*5000)
Run Code Online (Sandbox Code Playgroud)
我试着设置--verbosity=0和--debug-log=File,但他们都没有任何影响,这两个字符串仍印在屏幕上.
无论如何都要关闭assertEqual详细程度或将其重定向到除stderr之外的单独文件(还报告测试失败/通过)?
我是java中的断言概念的新手.我在哪里读过关于java中的断言概念,总是说,如果我们使用assert expression1:expression2,它将使用默认构造函数或AssertionError类中的七个构造函数之一,以防它失败. 但我怀疑的是,当assert语句失败时,谁实际上抛出了这个AssertionError错误?编译器是否会添加" throw new AssertionError(---) ",否则JVM将检查表达式并抛出AssertionError(如ArithmeticException,NullPointerException等...)?
我们使用Specflow,目前,我们的大多数断言都是使用Fluent Assertions完成的,例如:
myval.Should().NotBe(null)
一切都运行良好,但在某些情况下,我们希望相同的代码有时断言不确定,有时不会.
例如,假设我们有一个调用方法来安装AUT的步骤.
断言AUT可以正确安装的测试将使用此方法作为WHEN/THEN步骤的一部分.
在这种情况下,如果安装失败,我们希望正常进行并且无法通过测试.
GIVEN The AUT is NOT installed
WHEN I install the AUT
但是,对于所有其他测试,可以将相同的方法作为GIVEN步骤的一部分或作为BeforeScenario/BeforeFeature挂钩的一部分调用,并且在该实例中,如果安装失败,则测试应该失败,因为它是不是测试本身失败,而是安装阶段.
GIVEN the AUT is installed
WHEN I perform function X of the AUT
所以在这个例子中,让我们假设WHEN I install the AUT第一个测试中的步骤定义,以及GIVEN the AUT is installed第二个测试中的步骤定义只是用类似的东西调用辅助方法AppFacade.Install()
当然,我们可以AppFacade.Install()使用条件等垃圾和所有其他辅助方法,但我想知道是否有人有更优雅的解决方案 - 即扩展断言引擎的方式,以便它自动应用这个逻辑 - 我看到没有障碍实现此目的的Specflow方面,您可以检查Specflow上下文对象以检测您所处的步骤类型.
理想情况下,我们希望坚持使用流利断言,但如果这过于复杂化,我们会愿意重新考虑.
我写了一个函数,它将一个数字作为输入.例如:
def return_it_back(n):
return n
Run Code Online (Sandbox Code Playgroud)
我只需要使用assert检查输入是否为整数.所以,我写了一个测试函数:
def test():
assert return_it_back("k"), "incorrect input"
test()
Run Code Online (Sandbox Code Playgroud)
Python没有显示"输入错误".不将断言return_it_back("K"),"不正确输入"需要打印的"不正确输入"?
我正在学习c ++中的断言,并且遇到了std :: is_sorted的怪异行为。
给定一个比较器(c)和std :: strings的未排序向量(v)。我使用std :: sort(v.begin(),v.end(),comparator)。然后使用相同的参数调用std :: is_sorted。结果是错误的,为什么呢?
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
#include <cassert>
int main(){
auto comparator([](std::string a , std::string b) {return a.length() - b.length();} );
std::vector<std::string> v {"y" , "yyyy" , "yy" ,
"yy" , "yyyyyyy" , "yyy"};
assert(false == std::is_sorted(v.begin() , v.end(),comparator));
std::sort(v.begin(), v.end(),comparator);
assert(true == std::is_sorted(v.begin() , v.end(),comparator));
}
Run Code Online (Sandbox Code Playgroud)