标签: assert

python断言函数的建议

我在多个脚本中多次使用断言,我想知道是否有人对更好的方法有任何建议,而不是我在下面创建的函数.

def assert_validation(expected, actual, type='', message=''):

    if type == '==':

        assert expected == actual, 'Expected: %s, Actual: %s, %s' %(expected, actual, message)

    elif type == '!=':

        assert expected != actual, 'Expected: %s, Actual: %s, %s' %(expected, actual, message)

    elif type == '<=':

        assert expected <= actual, 'Expected: %s, Actual: %s, %s' %(expected, actual, message)

    elif type == '>=':

        assert expected >= actual, 'Expected: %s, Actual: %s, %s' %(expected, actual, message)



def assert_str_validation(expected, actual, type='', message=''):

    if type == '==':

        assert …
Run Code Online (Sandbox Code Playgroud)

python assert

1
推荐指数
1
解决办法
1807
查看次数

如何将assert宏实现为方法?

我希望将实现断言宏作为C++中的方法,如.NET Framewrk.

例如在C#中,我们可以像这样调用assert方法:

Debug.Assert(index > -1);
Run Code Online (Sandbox Code Playgroud)

我希望实现断言这样的东西:

#include <assert.h>
class debug
{
  public:

    static void my_asset(<condition>) // like assert macro
    {
      // ?
    }
};
Run Code Online (Sandbox Code Playgroud)

使用此课程时:

debug::my_asset(index > -1); // Actually should be called assert(index > -1);
Run Code Online (Sandbox Code Playgroud)

谢谢

编辑:

我想在调用时debug::my_asset(index > -1);,它显示正确的文件名和行号,它的工作方式类似于C++资产宏.

c++ methods macros assert

1
推荐指数
1
解决办法
1533
查看次数

C++:使用宏比较指针时的编译器错误

我已经定义了一个自定义断言宏.这适用于所有其他比较.但是,我得到编译器错误:

ISO C++ forbids comparison between pointer and integer
Run Code Online (Sandbox Code Playgroud)

当使用下面显示的宏(DWASSERT)来比较指针时,如下面的代码所示.

#define DWASSERT(condition,printstatement)  if(!condition){ printf(printstatement); assert(condition); }

#include <stdio.h>

int main()
{
    int target = 0;
    int* ptr1 = &target;
    int* ptr2 = &target;

    //Normal comparison works fine
    if(ptr1 == ptr2)
        printf("Equal");

    //Comparison using Macro generates compiler
    //error on the next line
    DWASSERT(ptr1 == ptr2, "Pointers not equal!\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

虽然我可以简单地避免在这种情况下使用DWASSERT,但我很好奇为什么会生成此编译器错误.

c++ macros assert

1
推荐指数
1
解决办法
433
查看次数

无助级别中的断言

我有一个测试用例和一个帮助类.在helper类中,我想在这里使用assert:

MainTests.h

#import <SenTestingKit/SenTestingKit.h>

@interface MainTests : SenTestCase

@end
Run Code Online (Sandbox Code Playgroud)

MainTests.m

#import "MainTests.h"
#import "HelperClass.h"

@implementation MainTests

- (void)testExample {
    HelperClass *helperClass = [[HelperClass alloc] init];
    [helperClass fail];
}

@end
Run Code Online (Sandbox Code Playgroud)

HelperClass.h

#import <SenTestingKit/SenTestingKit.h>

@interface HelperClass : SenTestCase

- (void)fail;

@end
Run Code Online (Sandbox Code Playgroud)

HelperClass.m

#import "HelperClass.h"

@implementation HelperClass

- (void)fail {
    STFail(@"This should fail");
}

@end
Run Code Online (Sandbox Code Playgroud)

旁注:我必须使辅助类成为子类,SenTestCase才能访问断言宏.

来自辅助类的断言被忽略.有什么想法吗?如何在辅助类中使用断言?

unit-testing assert ios sentestingkit

1
推荐指数
1
解决办法
275
查看次数

断言静态块Eclipse-java

我正在研究断言,所以写了下面的代码

public class AssertionDemo
{
    static
    {
        int i=7;
        assert i>10:i;
    }
 public static void main(String args[])
 {
     int i=8;
     assert (i<10):8;
     assert (i>10):9;
 }
}
Run Code Online (Sandbox Code Playgroud)

在控制台输出之前,我得到以下对话框

在此输入图像描述

OUTPUT:

Exception in thread "main" java.lang.AssertionError: 7
at logicBuliding.AssertionDemo.<clinit>(AssertionDemo.java:8)
Run Code Online (Sandbox Code Playgroud)

对话框怎么了?

java eclipse assert runtime-error exception

1
推荐指数
1
解决办法
237
查看次数

TDD:断言的数量,以及实际断言的内容?

我目前正在使用TDD编写测试,我遇到了一些问题.

通常在编写单元测试时,我总是习惯于每单元测试使用1个断言,因为这被定义为良好实践,并且很容易理解为什么测试失败.

在TDD中,做同样的事情也是一种好习惯,如果是这种情况,那么使用TDD有效地设计1个方法我将最终得到超过1个单元测试 - 因为我实际上需要超过1个断言.

另一个问题是我实际上断言了什么?

我可以断言我认为返回对象可能是什么?

所以我必须创建返回类型(可能是复杂的许多属性)并确保这些在断言上匹配,这在技术上可能是1断言.

或者另一种方式是确保我沿途弥补的嘲讽实际上被调用,即我的MOQ我可以做以下

     myServiceMock.Verify(x => x.ItemsReceived(), Times.Once());
Run Code Online (Sandbox Code Playgroud)

所以我可以确保在我的模拟上只调用一个方法,这实际上被归类为断言.所以它回到原始查询,每单元测试1断言,所以我需要创建额外的单元测试,以确保调用其他模拟上的其他方法.

其他人在这做什么?

你是断言在mocks上调用方法还是按照你的期望返回值.

真的很期待任何人对此有任何意见.

.net tdd nunit assert moq

1
推荐指数
2
解决办法
1050
查看次数

JavaFx中的断言和一般情况

在javaFx中,我们在每个生成的控制器类的initialize方法中看到以下语句,对于每个使用fxid的控件.

assert type != null : "fx:id=\"type\" was not injected: check your FXML file 'FinancialReport.fxml'.";
Run Code Online (Sandbox Code Playgroud)

我可以理解,该语句是为了确保在加载此fxml时,fx:id的控件存在于fxml布局文件中,如果控件不存在则会抛出异常并退出fxml加载过程.

但随后提到这一点,我了解到不建议在生产代码中使用断言.再次学习本教程,似乎断言很有用,特别是在调试时(但不能用于验证公共方法的参数).

我需要更多以下知识:

  1. 在生产代码中使用断言进行输入验证和此类目的是否可以?
  2. 当布尔表达式变为false时,我们可以做一些其他的事情吗,就像一些替代方法调用或某事(一个例子会很好).

java assert javafx

1
推荐指数
1
解决办法
1112
查看次数

为什么STL实现不使用断言来检测未定义的行为?

这是我认为可能有用但我没有看到在gcc的标准库中实现的东西.

基本上,在我看来,STL实现可以添加断言来检测(在运行时)简单的错误,如越界访问.我猜这些访问在标准中无论如何都是未定义的行为,所以肯定会打印错误消息并且-optionally-aborting将符合标准.

这些断言当然可以在编译时通过旧的NDEBUG标志或其他标志来关闭.

作为一个小例子,我希望此代码中止:

#include <vector>

int main()
{
    return std::vector<int>{1,2}[2];
}
Run Code Online (Sandbox Code Playgroud)

顺便说一下,我充分意识到像valgrind这样的工具的存在,但这可能是一个奖励.此外,像valgrind这样的内存检查工具不能保证在向量缩小后检测某些错误,例如访问越界元素,因为实现可能不会立即重新分配底层内存.

c++ assert stl

1
推荐指数
1
解决办法
131
查看次数

C#我怎么能在Assert.AreEqual中得到异常?

例:

Assert.AreEqual(**null**, Program.nDaysMonth(5, -10), "Error nDaysMonth, Month may -10.");
Run Code Online (Sandbox Code Playgroud)

我期待一个例外.我怎么能在Assert.AreEqual中得到异常?

谢谢.

c# assert exception

1
推荐指数
1
解决办法
1249
查看次数

assert()在发布模式下是否充当身份功能?

该库使用assert()好像它是发布模式下的标识函数(当定义了NDEBUG时).问题是一些重要的代码被包装assert(),并且在发布模式下执行时我的测试被触发,因为这些重要的部分没有被调用.这里可以找到一个例子,其中随机字节生成器不会生成任何东西,并将导致无限循环.

个人轶事:我不喜欢assert(),我个人不会因为这些歧义问题而使用它.我听说很多项目都有严重错误,因为它,最近的EOS,当他们的单元测试没有检测到一些超出范围的数组时,因为NDEBUG是在发布模式下定义的并且没有触发.在这一点上,文档似乎并不清楚.是否assert()充当身份?

这个库(libbtc)似乎被广泛使用,我不明白为什么开发人员会这样做.这是一个可怕的错误,我应该分叉并删除所有这些断言?或者这是一些与C++不兼容的C事物?有人可以在这里解释一下正确的行动方案吗?

我用clang 6.

c++ unit-testing assert c++11

1
推荐指数
1
解决办法
69
查看次数

标签 统计

assert ×10

c++ ×4

exception ×2

java ×2

macros ×2

unit-testing ×2

.net ×1

c# ×1

c++11 ×1

eclipse ×1

ios ×1

javafx ×1

methods ×1

moq ×1

nunit ×1

python ×1

runtime-error ×1

sentestingkit ×1

stl ×1

tdd ×1