标签: assert

PHP和单元测试断言带小数

我有一个方法返回一个像1.234567890的浮点数.我想测试它确实这样做.但是,似乎这个返回的float在不同平台上具有不同的精度,那么如何断言返回值是1.23456789?如果我这样做:

$this->assertEqual(1.23456789, $float);
Run Code Online (Sandbox Code Playgroud)

那么在某些精度不够的平台上可能会失败.

php precision phpunit unit-testing assert

26
推荐指数
3
解决办法
6765
查看次数

如何在Android Studio中使用assert

我一直在看这个问题,我认为仅在调试版本中使用assert是一个好主意.

我需要在Android Studio中配置哪些特殊内容才能允许断言?我还想保证它们不会在发布版本中出现.

android assert android-studio

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

断言(0)是什么意思?

我的一次考试中有这样的问题,我仍然不太清楚如何回答这个问题.我知道断言是测试你的程序的方法,但是我不太清楚什么assert(0)是检查.这是一个棘手的问题吗?它总会失败,但我不明白为什么.什么检查?

任何解释都会很棒,谢谢.

c c++ assert assertion

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

在C语言中在构建时ASSERT表达式的方法

我正在整理一些旧的代码,这些代码使用"幻数"来设置硬件寄存器,我想使用常量而不是这些数字来使代码更具表现力(实际上它们将映射到名称/用于记录寄存器的值).

但是,我担心随着变化的数量,我可能会打破神奇的数字.这是一个简化的例子(寄存器集更复杂):

const short mode0 = 0;
const short mode1 = 1;
const short mode2 = 2;

const short state0 = 0;
const short state1 = 4;
const short state2 = 8;
Run Code Online (Sandbox Code Playgroud)

而不是:

set_register(5);
Run Code Online (Sandbox Code Playgroud)

我们有:

set_register(state1|mode1);
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是构建时间版本:

ASSERT(5==(state1|mode1));
Run Code Online (Sandbox Code Playgroud)

更新

@Christian,感谢快速响应,我对C/non-boost环境的答案感兴趣,因为这是驱动程序/内核代码.

c refactoring assert static-assert

25
推荐指数
8
解决办法
2万
查看次数

Assert.Inconclusive的用法

我想知道有人应该如何使用Assert.Inconclusive().

我正在使用它,如果我的单元测试即将失败的原因不是测试的原因.

例如,我在类上有一个方法来计算int数组的总和.在同一个类中,还有一种计算元素平均值的方法.它通过调用sum并将其除以数组的长度来实现.

为Sum()编写单元测试很简单.但是,当我为Average()编写测试时,Sum()失败,那么Average()也可能失败.

平均值的失败并不清楚它失败的原因; 它失败的原因不是它应该测试的原因.这就是为什么我会检查Sum()是否返回正确的结果,否则我是Assert.Inconclusive().

这被认为是好习惯吗?什么是Assert.Inconclusive用于?或者我应该通过隔离框架来解决前面的例子?

.net tdd assert mocking stub

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

Java声明断断续续吗?

在探讨问题时,我最近assert在Java中发现了关键字.起初,我很兴奋.我还不知道有用的东西!一种更有效的方法来检查输入参数的有效性!耶老师!

但后来我仔细研究了一下,我的热情并没有像一个简单的事实那样"完全被扼杀"而"温和":你可以关闭断言.*

这听起来像是一场噩梦.如果我断言我不希望代码继续输入,如果输入listOfStuffnull,为什么我想要忽略该断言?听起来好像我正在调试一段生产代码,并怀疑listOfStuff可能错误地传递了一个,null但没有看到任何触发该断言的日志文件证据,我不相信listOfStuff实际上已经发送了一个有效值; 我还必须考虑断言可能完全被关闭的可能性.

这假设我是调试代码的人.不熟悉断言的人可能会看到并且(非常合理地)假设如果断言消息没有出现在日志中,则不会出现listOfStuff问题.如果你的第一次遭遇assert是在野外,你甚至会发现它可以完全关闭吗?毕竟,它不像是一个允许你禁用try/catch块的命令行选项.

所有这些都让我想到了我的问题(这一个问题,而不是一个咆哮的借口!我保证!):

我错过了什么?

是否有一些细微差别使得Java的实现assert比我给它的功劳更有用?在某些情况下,从命令行启用/禁用它的能力实际上是非常有价值的吗?当我设想在生产代码中使用它代替语句时,我是否误解了它if (listOfStuff == null) barf();

我觉得这里有一些重要的东西,我没有得到.

*好的,从技术上讲,它们实际上是默认关闭的; 你必须不遗余力地打开它们.但是,你仍然可以完全击败他们.


编辑: 启蒙要求,启示收到.

assert首先是一个调试工具的概念需要很长的路要走,才能使它对我有意义.

我仍然认为应该在生产环境中禁用输入检查非平凡私有方法的概念,因为开发人员认为不可能输入错误.根据我的经验,成熟的生产代码是一种疯狂的,庞大的东西,多年来由具有不同技能的人们开发,其目标是快速变化的不同程度的理智要求.即使糟糕的输入确实是不可能的,从现在起六个月后的一段邋maintenance维护编码也可以改变这一点. 提供的链接gustafc(谢谢!)包括这个例子:

assert interval > 0 && interval <= 1000/MAX_REFRESH_RATE : interval;

禁用如此简单的生产检查让我感到愚蠢乐观.然而,这是编码哲学的差异,而不是破碎的特征.

另外,我绝对可以看到这样的价值:

assert reallyExpensiveSanityCheck(someObject) : someObject;

感谢所有花时间帮助我理解这个功能的人; 这是非常赞赏.

java language-features assert design-by-contract

25
推荐指数
4
解决办法
2657
查看次数

Raise Try和Assert之间的区别

我已经学习了Python一段时间和raise功能,assert并且(我意识到他们两个都崩溃了应用程序,不像尝试 - 除外)非常相似,我看不到你会使用raiseassert结束的情况try.

那么,Raise,Try和Assert有什么区别?

python assert raise

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

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

如何根据2个或更多预期值断言实际值?

我正在测试一个方法,看它是否返回正确的字符串.该字符串由许多行组成,其顺序可能会发生变化,因此通常会提供2种可能的组合.该订单对我的申请并不重要.

但是,因为行的顺序可能会改变,所以只写一个Assert语句是行不通的,因为有时它会通过测试,有时它会使测试失败.

那么,是否可以编写一个测试,它将针对2个或更多预期的字符串值断言实际的字符串值,看看它是否等于它们中的任何一个?

java junit unit-testing assert

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

如何检查方法是否具有属性

我有一个示例课程

public class MyClass{

    ActionResult Method1(){
        ....
    } 

    [Authorize]
    ActionResult Method2(){
       ....
    }

    [Authorize]    
    ActionResult Method3(int value){
       ....
    }

}
Run Code Online (Sandbox Code Playgroud)

现在我想要的是编写一个返回true/false的函数,可以像这样执行

var controller = new MyClass();

Assert.IsFalse(MethodHasAuthorizeAttribute(controller.Method1));
Assert.IsTrue(MethodHasAuthorizeAttribute(controller.Method2));
Assert.IsTrue(MethodHasAuthorizeAttribute(controller.Method3));
Run Code Online (Sandbox Code Playgroud)

我到了那个地步

public bool MethodHasAuthorizeAttribute(Func<int, ActionResult> function)
{
    return function.Method.GetCustomAttributes(typeof(AuthorizeAttribute), false).Length > 0;
}
Run Code Online (Sandbox Code Playgroud)

适用于Method3.现在我怎么能以一种将字符串和类作为参数的方式来做那个泛型呢?

c# reflection tdd attributes assert

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