标签: assert

使Python的`assert`抛出我选择的异常

我可以assert抛出我选择的异常而不是AssertionError吗?

更新:

我将解释我的动机:到目前为止,我已经进行了断言式测试,这些测试提出了我自己的例外情况; 例如,当您Node使用某些参数创建对象时,它将检查参数是否适合创建节点,如果不是,则会引发NodeError.

但是我知道Python有一种-o跳过断言的模式,我希望它可用,因为它可以使我的程序更快.但我仍然希望有自己的例外.这就是为什么我想用自己的例外使用assert.

python assert exception

40
推荐指数
5
解决办法
4万
查看次数

assert()与消息

我通过以下方式看到某处断言与消息一起使用:

assert(("message", condition));
Run Code Online (Sandbox Code Playgroud)

这似乎很有效,除了gcc抛出以下警告:

warning: left-hand operand of comma expression has no effect
Run Code Online (Sandbox Code Playgroud)

我怎么能停止警告?

c gcc assert compiler-warnings

39
推荐指数
3
解决办法
3万
查看次数

如何在运行时找到当前函数的名称?

经过多年使用丑陋的MFC ASSERT宏,我终于决定抛弃它并创建最终的ASSERT宏.

我很好地获取文件和行号,甚至是失败的表达式.我可以显示带有这些的消息框,以及中止/重试/取消按钮.

当我按下Retry时,VS调试器会跳转到包含ASSERT调用的行(而不像某些其他ASSERT函数那样反汇编).所以这一切都非常有效.

但真正酷的是显示失败的函数的名称.

然后我可以决定是否调试它而不试图从文件名中猜出它的功能.

例如,如果我有以下功能:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
   ASSERT(lpCreateStruct->cx > 0);
   ...
}
Run Code Online (Sandbox Code Playgroud)

然后当ASSERT触发时,消息框将显示如下内容:

Function = CMainFrame::OnCreate
Run Code Online (Sandbox Code Playgroud)

那么,在运行时找到当前函数名的最简单方法是什么?

它不应该使用MFC或.NET框架,即使我确实使用这两者.
它应该尽可能便携.

c++ assert function

36
推荐指数
6
解决办法
5万
查看次数

Assert.AreEqual如何确定两个通用IEnumebles之间的相等性?

我有一个单元测试来检查方法是否返回正确的IEnumerable.该方法使用构建可枚举的yield return.它是可枚举的类如下:

enum TokenType
{
    NUMBER,
    COMMAND,
    ARITHMETIC,
}

internal class Token
{
    public TokenType type { get; set; }
    public string text { get; set; }
    public static bool operator == (Token lh, Token rh) { return (lh.type == rh.type) && (lh.text == rh.text); }
    public static bool operator != (Token lh, Token rh) { return !(lh == rh); }
    public override int GetHashCode()
    {
        return text.GetHashCode() % type.GetHashCode();
    }
    public override bool Equals(object obj) …
Run Code Online (Sandbox Code Playgroud)

c# ienumerable unit-testing assert mstest

35
推荐指数
4
解决办法
3万
查看次数

如何格式化符合PEP8的python断言语句?

如何格式化符合PEP8的长断言语句?请忽略我的例子的人为性质.

def afunc(some_param_name):
    assert isinstance(some_param_name, SomeClassName), 'some_param_name must be an instance of SomeClassName, silly goose!'
Run Code Online (Sandbox Code Playgroud)

无法将其包装在括号中,因为它会更改assert语句的行为,因为它是关键字,而不是内置函数.

python assert pep8

35
推荐指数
3
解决办法
1万
查看次数

Pthread互斥断言错误

我在基于linux的(arm)通信应用程序中在不可预测的时间遇到​​以下错误:

pthread_mutex_lock.c:82: __pthread_mutex_lock: Assertion `mutex->__data.__owner == 0' failed.
Run Code Online (Sandbox Code Playgroud)

谷歌出现了很多关于这个错误的引用,但很少有与我的情况相关的信息.我想知道是否有人可以给我一些关于如何解决此错误的想法.有谁知道这个断言的常见原因?

提前致谢.

linux assert mutex glibc pthreads

34
推荐指数
2
解决办法
3万
查看次数

Debug.Assert与特定的抛出异常

我刚刚开始浏览John Robbins的"调试MS .Net 2.0应用程序",并且因为他对Debug.Assert(...)的传福音而感到困惑.

他指出,良好实现的Asserts会在某种程度上存储错误状态,例如:

Debug.Assert(i > 3, "i > 3", "This means I got a bad parameter");
Run Code Online (Sandbox Code Playgroud)

现在,就个人而言,我似乎很疯狂,他如此喜欢在没有真正明智的"商业逻辑"评论的情况下重述他的测试,也许"因为flobittyjam widgitification过程,我必须永远不会发生i <= 3".

所以,我认为我认为Asserts是一种低级别的"让我保护我的假设"的东西......假设一个人认为这是一个只需要在调试中做的测试 - 即你保护自己不受同事的影响和未来的程序员,并希望他们实际测试的东西.

但是我没有得到的是,他继续说除了正常的错误处理之外你还应该使用断言; 现在我设想的是这样的:

Debug.Assert(i > 3, "i must be greater than 3 because of the flibbity widgit status");
if (i <= 3)
{
    throw new ArgumentOutOfRangeException("i", "i must be > 3 because... i=" + i.ToString());
}
Run Code Online (Sandbox Code Playgroud)

我通过Debug.Assert重复错误条件测试获得了什么?如果我们谈论一个非常重要的计算的仅调试双重检查,我想我会得到它...

double interestAmount = loan.GetInterest();
Debug.Assert(debugInterestDoubleCheck(loan) == interestAmount, "Mismatch on interest calc");
Run Code Online (Sandbox Code Playgroud)

...但是我没有得到参数测试,这肯定值得检查(在DEBUG和Release版本中)......或者不是.我错过了什么?

c# assert exception-handling

33
推荐指数
3
解决办法
9389
查看次数

是否会在java异常的catch块中捕获到断言错误?

码:-

try {
    Assert.assertEquals("1", "2");
} catch (Exception e) {
    System.out.println("I am in error block");
}
Run Code Online (Sandbox Code Playgroud)

如果断言语句失败,我想捕获catch块中的错误.我正在尝试上面的代码,它没有发生.

是否会在java异常的catch块中捕获断言错误?

java junit assert try-catch

33
推荐指数
2
解决办法
4万
查看次数

您应该在生产代码中使用 assert 语句断言 not null 吗?

我看过这个问题,但还有几个关于assert关键字用法的问题。我正在与其他一些编码人员讨论如何使用assert. 对于此用例,有一种方法可以在满足某些先决条件时返回 null。我编写的代码调用该方法,然后断言它不返回 null,并继续使用返回的对象。

例子:

class CustomObject {
    private Object object;

    @Nullable
    public Object getObject() {
        return (object == null) ? generateObject() : object;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在想象我像这样使用它:

public void useObject(CustomObject customObject) {
    object = customObject.getObject();
    assert object != null;
    // Do stuff using object, which would throw a NPE if object is null.
}
Run Code Online (Sandbox Code Playgroud)

有人告诉我应该删除assert,它们应该用于生产代码,只能用于测试。真的吗?

java assert nullable

33
推荐指数
4
解决办法
7330
查看次数

Python的assert_called_with,是否有通配符?

假设我在python中设置了这样一个类.

from somewhere import sendmail

class MyClass:

    def __init__(self, **kargs):
        self.sendmail = kwargs.get("sendmail", sendmail)  #if we can't find it, use imported def

    def publish():

        #lots of irrelevant code
        #and then

        self.sendmail(mail_to, mail_from, subject, body, format= 'html')
Run Code Online (Sandbox Code Playgroud)

所以你可以看到,我有点自己选择参数化我用于self.sendmail的函数

现在在测试文件中.

Class Tester():

    kwargs = {"sendmail": MagicMock(mail_from= None, mail_to= None, subject= None, body= None, format= None)}
    self.myclass = MyClass(**kwargs)

    ##later on
    def testDefaultEmailHeader():

        default_subject = "Hello World"
        self.myclass.publish()

        self.myclass.sendmail.assert_called()  #this is doing just fine
        self.myclass.sendmail.assert_called_with(default_subject)  #this is having issues
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我收到错误消息

AssertionError: Expected call: …
Run Code Online (Sandbox Code Playgroud)

python testing assert mocking

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