标签: assert

线程中的junit断言抛出异常

如果抛出异常而不是显示失败,或者我是否应该在线程内部没有断言,那么我做错了什么?

 @Test
 public void testComplex() throws InterruptedException {
  int loops = 10;
  for (int i = 0; i < loops; i++) {
   final int j = i;
   new Thread() {
    @Override
    public void run() {
     ApiProxy.setEnvironmentForCurrentThread(env);//ignore this
     new CounterFactory().getCounter("test").increment();//ignore this too
     int count2 = new CounterFactory().getCounter("test").getCount();//ignore
     assertEquals(j, count2);//here be exceptions thrown. this is line 75
    }
   }.start();
  }
  Thread.sleep(5 * 1000);
  assertEquals(loops, new CounterFactory().getCounter("test").getCount());
}
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪

Exception in thread "Thread-26" junit.framework.AssertionFailedError: expected:<5> but was:<6>
    at junit.framework.Assert.fail(Assert.java:47)
    at junit.framework.Assert.failNotEquals(Assert.java:277)
    at junit.framework.Assert.assertEquals(Assert.java:64) …
Run Code Online (Sandbox Code Playgroud)

java junit assert

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

我误解了assert()的用法吗?

我正在看assert()参考页,虽然我读给定的例子,我卡住了:

/* assert example */
#include <stdio.h>
#include <assert.h>

int main ()
{
  FILE * datafile;
  datafile=fopen ("file.dat","r");
  assert (datafile);

  fclose (datafile);

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

在此示例中,如果datafile比较等于0,则assert用于中止程序执行,这在前一次调用fopen时不成功.

我完全同意,如果fopen()失败,assert()将中止执行.但是我担心这个例子的正确性:

在我看来assert()是检测通常不会发生的情况(比如传递一个NULL指向函数的指针,该函数的文档声明它是被禁止的).

在此示例中,无法打开文件不是通常不会发生的事情.事实上,我可以看到为什么会失败的几十个原因.该文件不存在,程序可以在没有所需权限的情况下运行,依此类推.

我宁愿做类似的事情:

/* not longer an assert example */
#include <stdio.h>
#include <assert.h>

int main ()
{
  FILE * datafile;
  datafile=fopen ("file.dat","r");

  if (datafile != NULL)
  {
    // Do something, whatever.
    fclose (datafile);
  } else
  { …
Run Code Online (Sandbox Code Playgroud)

c c++ assert

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

有没有办法在Mockito的验证方法中使用类似jUnit Assert的消息参数?

让我们假设一段测试代码:

Observable model = Class.forName(fullyQualifiedMethodName).newInstance();
Observer view = Mockito.mock(Observer.class);
model.addObserver(view);
for (Method method : Class.forName(fullyQualifiedMethodName).getDeclaredMethods())
{
  method.invoke(model, composeParams(method));
  model.notifyObservers();
  Mockito.verify(
    view, Mockito.atLeastOnce()
  ).update(Mockito.<Observable>any(), Mockito.<Object>any());
}
Run Code Online (Sandbox Code Playgroud)

Mockito.verify如果模型中的Observable.setChanged()方法没有调用方法,则抛出异常.

问题:没有添加loggers/System.print.out我无法意识到当前测试失败的方法是什么.有没有办法与jUnit Assert方法类似:

Assert.assertEquals(
  String.format("instances %s, %s should be equal", inst1, inst2),
  inst1.getParam(), 
  inst2.getParam()
);
Run Code Online (Sandbox Code Playgroud)

解:

verify(observer, new VerificationMode()
{
  @Override
  public void verify(VerificationData data)
  {
    assertTrue(
        format(
            "method %s doesn't call Observable#setChanged() after changing the state of the model",
            method.toString()
        ),
        data.getAllInvocations().size() > 0);
  }
}).update(Mockito.<Observable>any(), Mockito.<Object>any());
Run Code Online (Sandbox Code Playgroud)

java junit assert verify mockito

21
推荐指数
3
解决办法
9135
查看次数

在gdb中打破失败的断言的正确方法是什么?

我试图在我的程序中捕获失败的断言.我正在使用一个直接调用assert()的库,而不是自定义函数或宏,并且它在此库中我正在尝试跟踪几个与移植相关的错误.涉及的所有内容都使用g ++中的调试符号进行编译.

我找到的最好的解决方案是破坏文件:assert的行,以及assert表达式的条件.这允许在失败之前停止断言,但这是一个可怕的解决方案.它需要针对每个可能失败的断言进行特殊设置,不能在我的IDE中运行,并且通常需要付出太多努力.

如何以允许检查assert调用范围内的callstack和变量的方式使用gdb和gcc 中断任何失败的断言?

如果解决方案允许我放弃断言的失败并继续运行,那将会更好.

c++ debugging gdb assert g++

21
推荐指数
2
解决办法
8735
查看次数

在Boost测试框架中测试assert

我使用Boost Test框架对我的C++代码进行单元测试,并想知道是否可以测试函数是否会断言?是的,听起来有点奇怪,但请忍受我!我的许多函数在输入时检查输入参数,断言它们是否无效,并且测试它是有用的.例如:

void MyFunction(int param)
{
    assert(param > 0); // param cannot be less than 1
    ...
}
Run Code Online (Sandbox Code Playgroud)

我希望能够做到这样的事情:

BOOST_CHECK_ASSERT(MyFunction(0), true);
BOOST_CHECK_ASSERT(MyFunction(-1), true);
BOOST_CHECK_ASSERT(MyFunction(1), false);
...
Run Code Online (Sandbox Code Playgroud)

你可以检查使用Boost测试抛出的异常,所以我想知道是否还有一些断言魔法......

c++ boost unit-testing assert boost-test

20
推荐指数
3
解决办法
9989
查看次数

在C#中,Debug.Assert测试是否在发布模式下运行?

请看以下示例:

public void Foo()
{
    //Code...

    Debug.Assert(ExpensiveTest());

    //Code...
}
Run Code Online (Sandbox Code Playgroud)

Debug.Assert在发布模式下编译时,该方法会发生什么?会ExpensiveTest()继续吗?如果没有,那么它是如何工作的(因为它不是一个可以设置为无评估的宏)?如果它确实运行,那么这是否会破坏调试断言的目的?

.net c# debugging assert visual-studio

20
推荐指数
3
解决办法
5710
查看次数

在C++中实现断言检查的最佳方法是什么?

我的意思是,我需要做什么才能在我的代码中使用有用的断言?

MFC很简单,我只使用ASSERT(某物).

什么是非MFC方式?

编辑:是否有可能在assert.c中停止断言而不是我的调用assert()的文件?

编辑:<assert.h>&之间有什么区别<cassert>

一般承认的答案:在这篇文章中有很多很棒的答案,我希望我能接受不止一个答案(或者有人将它们全部合并).所以答案会被授予Ferruccio(第一个答案).

c++ debugging assert debugbreak

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

与Java的断言不同,Groovy是否对生产代码提出了一个好主意?

在Java中,已知使用assert关键字通常是一个坏主意,因为它的行为依赖于运行时环境(默认情况下它不会执行任何操作,除非将-enableassertion传递给java运行时).

Groovy的主张是不同的吗?它总是在生产代码中执行,是否建议在生产代码中使用?(在Java中你会使用像Preconditions这样的东西)

从我的健全性测试来看,似乎默认情况下assert没有任何标志,并且它实际上比Java关键字更强大(参见Power Assert) - 我只是在寻找官方/完整答案,而不是我的轶事.

java groovy assert

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

Symfony2验证日期时间1应该在日期时间2之前

我正在查看Symfony2验证参考,但我找不到我需要的东西.

我有一个带有StartDateEndDate的课程.我想添加一个\ @Assert(),它验证StartDate始终是BEFORE EndDate.是否存在将类属性作为验证约束进行比较的标准方法,还是应该创建自定义验证约束?

class Employment {

    /**
    * @ORM\Id
    * @ORM\Column(type="integer")
    * @ORM\GeneratedValue(strategy="AUTO")
    * @Expose() 
    */
    protected $id;

    /**
    * @ORM\Column(type="datetime") 
    * @Expose()
    * @Assert\DateTime()
    */
    protected $startDate;

    /**
    * @ORM\Column(type="datetime", nullable=TRUE)
    * @Expose()
    * @Assert\DateTime()
    */
    protected $endDate;

...
}
Run Code Online (Sandbox Code Playgroud)

php validation assert symfony doctrine-orm

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

有什么方法可以在Swift中捕获断言吗?

似乎Swift没有类似C#/ Java的异常,而是使用断言.但是,该书说,在生产环境中,它们会立即使应用程序崩溃.周围没有办法吗?单元测试怎么样,如何测试某个函数断言它获得了正确的输入值?

assert exception try-catch swift

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