C# 仅在调用回调时使单元测试通过
我试图对一些代码进行单元测试,以确保调用了回调,但似乎即使在方法中没有“Assert”调用,它也会通过。考虑下面的代码示例:C# 仅在调用回调时使单元测试通过,c#,unit-testing,nunit,C#,Unit Testing,Nunit,我试图对一些代码进行单元测试,以确保调用了回调,但似乎即使在方法中没有“Assert”调用,它也会通过。考虑下面的代码示例: public void Show_ShowSomeAdFormat_CallbackShouldBeInvoked() { AdManager adManager = new AdManager(); adManager.Show<VideoTestAdFormat>((response) => { //Asse
public void Show_ShowSomeAdFormat_CallbackShouldBeInvoked()
{
AdManager adManager = new AdManager();
adManager.Show<VideoTestAdFormat>((response) =>
{
//Assert.Pass(); <--- With or without this, the test will pass.
//I need it to only pass if it reaches this. How is it done?
});
}
public void Show\u ShowSomeAdFormat\u CallbackShouldBeInvoked()
{
AdManager AdManager=新的AdManager();
adManager.Show((响应)=>
{
//Assert.Pass();使用捕获的bool
public void Show_ShowSomeAdFormat_CallbackShouldBeInvoked()
{
AdManager adManager = new AdManager();
bool callbackInvoked = false;
adManager.Show<VideoTestAdFormat>((response) => callbackInvoked = true);
// If the callback is invoked asynchronously,
// you'll need a way to wait here for Show to complete.
Assert.IsTrue(callbackInvoked);
}
public void Show\u ShowSomeAdFormat\u CallbackShouldBeInvoked()
{
AdManager AdManager=新的AdManager();
bool callbackcalled=false;
adManager.Show((响应)=>callbackInvoked=true);
//如果回调是异步调用的,
//你们需要在这里等待演出完成。
Assert.IsTrue(回调调用);
}
编辑:
如果您使用的是.NET 4,则可能需要Show
返回一个任务
,该任务在Show
完成工作时完成。在早期的.NET版本中,您可以返回ManualResetEvent
“return”可以是返回值,也可以是带有out
参数的Show
重载。Ahh谢谢!但是回调不可能在实际到达“Assert”行后执行吗?编辑:只是尝试延迟回调,但不起作用。将在实际回调之前调用Assert:(如果Show
是异步运行的,那么是的。如果是这种情况,您必须在运行assert之前等待Show
完成,否则您将遇到使用同步测试测试异步代码的典型问题。为此,您可以使用线程。Sleep
,但等待的时间是多长h、 …世界可能永远不会知道。啊,好吧!在测试场景中,它实际上是同步的,但情况可能并非总是如此。感谢您的澄清(可能在回答中提及)。