这不是一个"问题"所以我正在制作CW.
该
assert
Run Code Online (Sandbox Code Playgroud)
关键字很棒!
它应该让你觉得你的自己对你编写的代码更有信心,但是,直到今天,当我创建一个小型测试类(<20行)时,我意识到自从它被引入以来从未使用它.
哎呀!我几乎没有使用记录器,这确实非常有用,但直到今天我才意识到我不使用断言.
你使用断言吗?如果不是,那是什么原因?
我正在开发一个生成设备报告的库.generate_report (const std::string& no)由于各种原因,成员函数可能会失败:
report_generator是FSM)哪种错误处理机制最适合这些错误?
true或false一些上下文信息:正常的工作流程如下.用户激活设备,从列表中选择报告并单击"生成".
编辑:感谢您的回复!对我来说,现在很清楚何时使用断言以及何时进行错误处理.至于错误处理,错误代码和异常都有利有弊.我想我会考虑异常(并为上述错误创建四个类),但我还不确定.我总是想到"意外情况"的例外情况.无效的报告编号并非真正意外.有什么建议?:)
如果assert失败,通常会想要打印其他信息.一种方法是这样的:
assert(vec.size() > i ||
!(std::cerr << "False: " << vec.size() << ">" << i))
Run Code Online (Sandbox Code Playgroud)
这样,当assert失败时打印实际尺寸.但它很难看,并且很容易忘记!,这将使断言条件成立,程序将继续.
如上所述,人们使用什么来打印关于断言失败的其他信息?
我打电话_mocks.ReplayAll(),然后一个或多个_mockedObject.AssertWasCalled()然后_mocks.VerifyAll().但它告诉我"当模拟对象处于记录状态时,此操作无效".
[Test]
public void SetStateExecuting_Should_Set_State_To_Pause_And_Not_Change_GlobalState_When_GlobalState_Is_Paused()
{
var task = new Task { ID = 1, TimeZone = -660, GlobalState = TaskState.Paused };
_taskDataProvider.Expect(p => p.StateUpdate(task.ID, task.TimeZone, TaskState.Paused));
_mockRepository.ReplayAll();
_manager.SetStateExecuting(task);
_taskDataProvider.AssertWasNotCalled(p => p.GlobalStateUpdate(task.ID,
TaskState.Executing));
_mockRepository.VerifyAll();
}
Run Code Online (Sandbox Code Playgroud)
调用正确的顺序是什么,以便这些方法正常工作?
我有一个PagedModel类,它实现IEnumerable只返回ModelData,忽略分页数据.我还重写了Equals和GetHashCode,以允许比较两个PagedModel对象的ModelData,PageNumber和TotalPages以及PageSize.
这是问题所在
Dim p1 As New PagedModel() With {
.PageNumber = 1,
.PageSize = 10,
.TotalPages = 10,
.ModelData = GetModelData()
}
Dim p2 As New PagedModel() With {
.PageNumber = 1,
.PageSize = 10,
.TotalPages = 10,
.ModelData = GetModelData()
}
p1.Equals(p2) =====> True
Assert.AreEqual(p1, p2) ======> False!
Run Code Online (Sandbox Code Playgroud)
看起来NUnit调用它的内部EnumerableEqual方法来比较我的PagedModel而不是使用我提供的Equals方法!有没有办法覆盖这种行为,或者我是否必须编写自定义断言.
在C++中:
assert( std::is_same<int , int>::value ); // does not compile
assert( (std::is_same<int , int>::value) ); // compiles
Run Code Online (Sandbox Code Playgroud)
有谁能解释为什么?
根据文件
assertEquals()断言两个对象是相等的.
assertSame()断言两个对象引用同一个对象.
所以我期待如果我有一个类似下面的课程
class SomeClass {}
Run Code Online (Sandbox Code Playgroud)
然后
SomeClass someClass1= new SomeClass();
SomeClass someClass2= new SomeClass();
assertSame(someClass1,someClass2); // fail
assertEquals(someClass1,someClass2); // fail
Run Code Online (Sandbox Code Playgroud)
assertEquals应该传递,assertSame应该失败,因为两个类的值相等但它们具有不同的引用位置.
由于我在两种情况下都失败了,那么我的问题是这两者之间有什么区别?
我正在使用Python断言语句来匹配实际和预期的行为。我对这些没有控制权,好像有一个错误测试用例中止了一样。我想控制断言错误,并要定义是否要在失败断言时中止测试用例。
我还想添加一些类似的内容,如果存在断言错误,则应该暂停测试用例,并且用户可以随时恢复。
我不知道该怎么做
代码示例,我们在这里使用pytest
import pytest
def test_abc():
a = 10
assert a == 10, "some error message"
Run Code Online (Sandbox Code Playgroud)
Below is my expectation
当assert抛出assertionError时,我应该可以选择暂停测试用例,并且可以调试并稍后恢复。对于暂停和恢复,我将使用tkinter模块。我将做一个断言功能如下
import tkinter
import tkinter.messagebox
top = tkinter.Tk()
def _assertCustom(assert_statement, pause_on_fail = 0):
#assert_statement will be something like: assert a == 10, "Some error"
#pause_on_fail will be derived from global file where I can change it on runtime
if pause_on_fail == 1:
try:
eval(assert_statement)
except AssertionError as e:
tkinter.messagebox.showinfo(e)
eval (assert_statement)
#Above is to raise the …Run Code Online (Sandbox Code Playgroud) 我只需要运行ship build,我需要在发布版本中断言某些条件以查看问题是否已修复.我该怎么做?