标签: assert

Assert.AreEqual失败,但不应该

我有一个非常奇怪的行为,我无法解释.

我有以下课程:

public class Project
{
    public virtual int Id { get; set; }

    public virtual string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

以及返回Project对象的方法:

public Project GetByName(string Name)
{
    using (ISession session = NHibernateHelper.OpenSession())
    {
        Project project = session.CreateCriteria(typeof(Project))
                                 .Add(Restrictions.Eq("Name", Name))
                                 .UniqueResult<Project>();

        return project;
    }
}
Run Code Online (Sandbox Code Playgroud)

我添加了一个单元测试来测试GetByName方法:

[TestMethod]
public void TestGetByName()
{
    IProjectsRepository projectRepository = new ProjectsRepository();

    var expected = new Project { Id = 1000, Name = "Project1" };
    var actual = projectRepository.GetByName(expected.Name);

    Assert.AreEqual<Project>(expected, actual); …
Run Code Online (Sandbox Code Playgroud)

c# assert mstest visual-studio-2012

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

什么是断言?你为什么要用它们?

如何在c ++中完成断言?示例代码表示赞赏.

c++ assert

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

使用assert(Java等)的一些(反)模式

最后,我有一个问题要问Stack Overflow!:-)

主要目标是Java,但我认为它主要与语言无关:如果你没有本机断言,你可以随时模拟它.

我在一家销售一套用Java编写的软件的公司工作.代码很旧,至少可以追溯到Java 1.3,在某些地方,它显示......这是一个庞大的代码库,大约有两百万行,所以我们不能一次重构它.
最近,我们将最新版本从Java 1.4语法和JVM切换到Java 1.6,保守地使用了一些新功能,例如assert(我们曾经使用过DEBUG.ASSERT宏 - 我知道assert已经在1.4中引入但我们没有使用过它之前),泛型(只有打字的集合),foreach循环,枚举等.

尽管我已经阅读了几篇关于这个主题的文章,但我对assert的使用仍然有点青睐.然而,我看到的一些用法让我感到困惑,伤害了我的常识... ^ _ ^所以我想我应该问一些问题,看看我是否正确想要纠正的东西,或者它是否违背了常规做法.我很啰嗦,所以我大胆地提出问题,因为那些喜欢撇去东西的人.

作为参考,我在SO中搜索断言java并发现了一些有趣的线程,但显然没有完全重复.

首先,主要问题,今天引发了我的问题:

SubDocument aSubDoc = documents.GetAt( i );
assert( aSubDoc != null );
if ( aSubDoc.GetType() == GIS_DOC )
{
   continue;
}
assert( aSubDoc.GetDoc() != null );
ContentsInfo ci = (ContentsInfo) aSubDoc.GetDoc();
Run Code Online (Sandbox Code Playgroud)

(是的,我们使用MS的C/C++样式/代码约定.我甚至喜欢它(来自相同的背景)!所以起诉我们.)
首先,assert()表单来自DEBUG.ASSERT()调用的转换.我不喜欢额外的括号,因为assert是一个语言结构,而不是(不再是,这里)一个函数调用.我也不喜欢return (foo);:-) …

java language-agnostic assert

14
推荐指数
2
解决办法
4742
查看次数

是否值得在ASP.NET中使用Debug.Assert?

在ASP.NET中设置适当的调试环境似乎是一个相当大的麻烦,我只是想知道是否使用Asserts是否可行.我读了一下,看到你需要修改你的web.config以正确使用Asserts.这通常是最好的方法还是其他调试方法可能更容易使用?

我们不使用单元测试框架,因此与问题无关.

你怎么知道他们正常工作或根本不工作的区别?目前我可以在我的代码中输入断言,它绝对不会做任何事情,因为它们没有在web.config中配置.这对我来说似乎很危险.

asp.net debugging assert

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

断言在具有单元测试的C++程序中的作用是什么?

我一直在为一些遗留的C++代码添加单元测试,并且我遇到了很多场景,其中函数内的断言在单元测试运行期间会被触发.我遇到的一个常见习语是带有指针参数的函数,如果参数为NULL则立即断言.

当我进行单元测试时,我可以通过禁用断言轻松解决这个问题.但我开始怀疑单元测试是否应该减轻对运行时断言的需求.这是正确的评估吗?单元测试是否应该通过在管道中更快地发生来替换运行时断言(即:错误是在失败的测试中捕获而不是在程序运行时).

另一方面,我不喜欢添加软代码失败(例如if (param == NULL) return false;).运行时断言至少可以在单元测试错过错误时更容易调试问题.

c++ unit-testing assert

14
推荐指数
2
解决办法
1820
查看次数

Python错误检查标准实践

我有一个关于Python中的错误检查的问题.假设我有一个将文件路径作为输入的函数:

def myFunction(filepath):
    infile = open(filepath)
    #etc etc...
Run Code Online (Sandbox Code Playgroud)

一个可能的先决条件是文件应该存在.

有几种可能的方法来检查这个前提条件,我只是想知道最好的方法是什么.

i)检查if语句:

if not os.path.exists(filepath):
    raise IOException('File does not exist: %s' % filepath)
Run Code Online (Sandbox Code Playgroud)

这是我通常会这样做的方式,尽管如果文件不存在,Python会引发相同的IOException,即使我没有提出它.

ii)使用assert检查前提条件:

assert os.path.exists(filepath), 'File does not exist: %s' % filepath
Run Code Online (Sandbox Code Playgroud)

使用asserts似乎是检查前/后条件的"标准"方式,所以我很想使用它们.但是,在执行期间使用-o标志时,可能会关闭这些断言,这意味着可能会关闭此检查,这似乎有风险.

iii)根本不处理前提条件

这是因为如果filepath不存在,则无论如何都会生成异常,并且异常消息足够详细,以便用户知道该文件不存在


我只是想知道上面哪一项是我应该用于我的代码的标准做法.

python error-handling assert

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

你如何检查哪个线程在Java中执行代码?

我有一个多线程Java程序,其中包含一些围绕线程的规则:例如,A类中的代码只能从UI线程调用; 必须仅从网络线程等调用B类中的3个方法.

关于如何进行断言或其他代码检查的任何建议都遵循这些规则?我想做相当于"不变量"的测试,以防止线程使用上的编码错误.

java concurrency multithreading assert

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

javax.annotation.Nonnull vs assert

我在方法参数上使用Findbugs和javax.annotation.Nonnull.

在私有方法上,我通常添加一个断言行来检查null

private void myMethod(@Nonnull String str) {
    assert str != null
    ....
Run Code Online (Sandbox Code Playgroud)

最新的Netbeans版本(7.3rc2)报告断言检查不是必需的(因为Nonnull注释).我不完全确定这是一个Netbeans错误.

可以删除断言行,因为我指定了@Nonnull注释吗?

据我所知,注释仅在静态分析期间使用,而assert在启用时在执行期间处于活动状态,因此两个不是替代.

java assert findbugs null-check

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

断言两个java bean是等价的

这个问题很接近,但仍然不是我想要的.我想以通用的方式断言两个bean对象是等价的.如果它们不是,我想要一个详细的错误消息来解释差异而不是布尔"等于"或"不等于".

java unit-testing assert equality javabeans

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

捕获带有副作用的assert()

我们有几个中等大小的C代码库,可以接收来自具有各种经验级别的开发人员的提交.一些不那么有纪律的程序员会assert()使用副作用来声明语句,这会导致断言被禁用.例如

assert(function_that_should_always_be_called());
Run Code Online (Sandbox Code Playgroud)

我们已经使用了自己的assert()实现,但是使用NDEBUGdefine定义表达式会导致不可接受的性能下降.是否有我们可以传递的GCC扩展或标志会触发这些的编译时警告/错误?通过足够简单的控制流程,GCC应该可以确定您只调用纯函数.

c gcc assert

13
推荐指数
3
解决办法
2843
查看次数