Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 仅在调用回调时使单元测试通过_C#_Unit Testing_Nunit - Fatal编程技术网

C# 仅在调用回调时使单元测试通过

C# 仅在调用回调时使单元测试通过,c#,unit-testing,nunit,C#,Unit Testing,Nunit,我试图对一些代码进行单元测试,以确保调用了回调,但似乎即使在方法中没有“Assert”调用,它也会通过。考虑下面的代码示例: public void Show_ShowSomeAdFormat_CallbackShouldBeInvoked() { AdManager adManager = new AdManager(); adManager.Show<VideoTestAdFormat>((response) => { //Asse

我试图对一些代码进行单元测试,以确保调用了回调,但似乎即使在方法中没有“Assert”调用,它也会通过。考虑下面的代码示例:

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、 …世界可能永远不会知道。啊,好吧!在测试场景中,它实际上是同步的,但情况可能并非总是如此。感谢您的澄清(可能在回答中提及)。