标签: assertions

.Net相当于Java的AssertionError

在Java中,我偶尔会AssertionError直接抛出一个,断言不会到达某个特定的行.这样做的一个示例defaultswitch声明无法访问语句中的大小写(有关示例,请参阅此JavaSpecialists页面).

我想在.Net中使用类似的机制.我可以使用相同的例外吗?或者是否有另一种方法可以使用相同的效果?

编辑 - 为了澄清,我正在寻找一种在运行时标记失败的机制,在已发布的代码中,表明代码中某些不变量(可能是灾难性的)失败.链接的示例生成0到2(包括0和2)之间的随机整数,并声明生成的数字始终为0,1或2.如果此断言不成立,则最好完全停止执行而不是继续使用某些未知数腐败的系统状态.

.net java exception assertions

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

如何让Clojure尊重`*assert*`变量?

我理解Clojure的*assert*变量可以用来关闭断言,但我做的事似乎没有用.

(defn foo [a]
  {:pre [(pos? a)]}
  (assert (even? a))
  [a])

(binding [*assert* false]
  (foo 1))
!! exception

(binding [*assert* false]
  (foo -2))
!! exception
Run Code Online (Sandbox Code Playgroud)

甚至false在定义时绑定也有同样的问题:

(binding [*assert* false]
  (defn bar [a]
    {:pre [(pos? a)]}
    (assert (even? a))
    [a]))

(bar 1)
!! execption
Run Code Online (Sandbox Code Playgroud)

然后甚至直接设置变量也不起作用.

*assert*
is true

(alter-var-root (var *assert*) not)
*assert*
is still true
Run Code Online (Sandbox Code Playgroud)

(var-set (var *assert*) false)
*assert*
is still true
Run Code Online (Sandbox Code Playgroud)

所以现在我不明白该怎么做.我很迷惑.

谢谢.

clojure assertions

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

如何在R中进行断言?

是否建议使用RUnit的check*函数来创建前置条件/​​后置条件语句,或者在性能或其他方面有一些问题吗?

unit-testing r assertions

10
推荐指数
2
解决办法
1674
查看次数

为什么确保仅在其他方面工作?

在scala中,当我使用确保 predef时,它只适用于if-else表达式的else部分:

def evenIt(x:Int) = {
    if(x % 2 == 0)
            x+1 //return odd on purpose!
    else{
      x + 1
    } ensuring( _ % 2 == 0)
}

//Test it:
evenIt(3)
> 4
evenIt(4)
> 5  //<--- ensuring does not catch this!
Run Code Online (Sandbox Code Playgroud)

但我认为"if-else"是scala中的表达.所以它应该只返回一个值 - 反过来应该传递给确保

或者我在这里混淆了什么?谢谢.

编辑:在Scala编程中,作者使用如下:

private def widen(x: Int) : Element =
   if(w <= width)
      this
   else {
      val left = elem(' ', (w - width) / 2, height)
      var right = elem(' …
Run Code Online (Sandbox Code Playgroud)

scala assertions

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

如何在iOS中为预期的assert/assertionFailure编写单元测试?

更新:

看起来这个功能应该在即将推出的Swift 2.0/XCode 7版本中得到支持,这显然将包括try/catch优点,所以这个问题可能没有实际意义.当他们没有测试版时,我会尝试相应地更新这篇文章.

原始问题:

在Swift中,虽然我假设问题/答案适用于Objective-C,但我想编写一个foo格式函数:

public class SomeClass{
  public func foo(someString:String){
    //validate someString
    assert(!someString.isEmpty, "The someString parameter cannot be empty.")
  }
}
Run Code Online (Sandbox Code Playgroud)

我使用了一个assert电话,因为我相信这是Apple推荐的,而不是抛出异常,这在其他语言中很常见.

但是,在我的单元测试中,我希望能够确保当someString参数为空字符串时函数确实失败:

class SomeClass_Tests:XCTestCase{
  func test_foo_someStringParamaterIsEmpty_error(){
    //ACTION
    let someClassInstance = SomeClass()
    someClassInstance.foo("")

    //VALIDATE
    //**What goes here?
  }
}
Run Code Online (Sandbox Code Playgroud)

我找不到关于这种情况的文档或帖子,尽管我认为这是一个非常重要的单元测试,以确保类和库的正确行为和使用.

在包含异常/异常处理的其他语言中,assert将替换为类似的东西throw SomeError()然后,在单元测试中,您可以简单地将操作包装在try/ catchblock中并声明异常确实已设置,如下所示:

class SomeClass_Tests:XCTestCase{
  func test_foo_someStringParamaterIsEmpty_error(){
    //ACTION
    let someClassInstance = SomeClass()

    var expectedException:SomeException? = nil
    try{
      someClassInstance.foo("")
    }catch(someException:SomeException){
      expectedException = someException
    } …
Run Code Online (Sandbox Code Playgroud)

unit-testing assertions ios xctest swift

9
推荐指数
2
解决办法
4774
查看次数

自信编程的好处

将断言放入代码中有什么意义?自信编程有什么好处?

private void WriteMessage(string message)
{
    Debug.Assert(message != null, "message is null");

    File.WriteAllText(FILE_PATH, message);
}
Run Code Online (Sandbox Code Playgroud)

例如,我们可以检查消息变量并在此处抛出异常.为什么我在这里使用assert?或者这是一个错误的例子,看到断言的好处?

debugging assertions

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

调试断言失败!表达式:_BLOCK_TYPE_IS_VALID

我收到此错误消息:

调试断言失败!

表达:_BLOCK_TYPE_US_VALID(pHead-> nBlockUse)

同时尝试做以下事情

#include <vector>
#include <algorithm>
using namespace std;

class NN
{
public:
    NN(const int numLayers,const int *lSz,const int AFT,const int OAF,const double initWtMag,const int UEW,const double *extInitWt);
    double sse;
    bool operator < (const NN &net) const {return sse < net.sse;}
};

class Pop
{
    int popSize;
    double a;
public:

    Pop(const int numLayers,const int *lSz,const int AFT,const int OAF,const double initWtMag,const int numNets,const double alpha);
    ~Pop();
    vector<NN> nets;
    void GA(...);
};

Pop::Pop(const int numLayers,const int *lSz,const int …
Run Code Online (Sandbox Code Playgroud)

c++ debugging assertions

8
推荐指数
1
解决办法
5万
查看次数

Java - 用断言问题编程

我想知道是否有很多人用java编程断言.我认为这对于没有足够书面合同或过时合同的大型项目非常有用.特别是当你使用webservices,组件......

但我从未见过任何使用断言的项目(除了junit/testng测试......).

我注意到抛出的类是一个错误而不是异常.有人能告诉我他们为什么选择错误吗?可能是因为异常可能被意外捕获而不是记录器/重新抛出?

如果您使用组件开发应用程序,我想知道您在哪里放置断言: - 在组件方面,就在通过公共API返回数据之前? - 在组件客户端?如果在任何地方调用api,你会设置一个称为断言机制的外观模式?(然后我猜你把你的断言和外观放在一些外部项目上,你的客户端项目将依赖于这个断言项目?)

我理解如何使用断言,并在使用它们时,只是想知道是否有人根据真实的断言经验提出建议.

谢谢

java assert exception assertions java-ee

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

如何在constexpr函数中执行运行时断言?

根据我的理解,constexpr函数可以在编译时和运行时执行,具体取决于整个评估是否可以在编译时完成.

但是,您不能重载此函数以使运行时和编译时对应.

所以我的问题是,如何在运行时断言中确保运行时函数的执行与我的static_assert一起传递有效参数?

assert assertions constexpr c++11

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

Java - TestNG:为什么我的Assertion总是在try-catch块中写入时通过

我正在尝试使用一个简单的代码org.testng.Assert来断言2个用例.在第一个用例中,我Fail正确地声明了2个不相等的值.

但是在第二个用例中,当我在try-catch块中断言2个不相等的值时,结果总是返回为 Pass

我的代码如下:

package demo;
import org.testng.Assert;
import org.testng.annotations.Test;
public class Q43710035 
{

    @Test
    public void test1() 
    {
        System.out.println("Within test1");
        int a = 12;
        int b =20;
        Assert.assertEquals(a, b);

    }

    @Test
    public void test2() 
    {
        System.out.println("Within test2");
        int a = 12;
        int b =20;

        try 
        {
            Assert.assertEquals(a, b);
        }catch(Throwable t)
        {
            System.out.println("Exception Occurred");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到的结果是:

Within test1
Within test2
Exception Occurred
PASSED: test2
FAILED: test1
java.lang.AssertionError: expected [20] but found [12]
at org.testng.Assert.fail(Assert.java:94) …
Run Code Online (Sandbox Code Playgroud)

java testng exception-handling try-catch assertions

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