相关疑难解决方法(0)

单元测试异步功能

在下面的代码示例中,我有一个Async Calculator类.这是注入一个ICalc,它将是一个同步计算器.我使用依赖注入和模拟ICalc,因为这类似于我的真实场景,尽管我认为模拟与问题无关.AsyncCalc有一个函数,它将异步调用另一个函数 - 将回调作为参数.当异步函数调用完成时,将使用结果触发回调.

现在我想测试我的异步函数 - 检查是否使用期望参数触发了回调.这段代码似乎有效.但是,我觉得它可能随时都会爆炸 - 我担心的是在函数结束和测试终止之前完成回调的竞争条件 - 因为这将在一个单独的线程中运行.

我现在的问题是,如果我在正确的轨道单元测试异步功能,或者是否有人可以帮助我走上正确的轨道..?更好的是,如果我能确保立即触发回调 - 最好是在同一个线程上我猜?可以/应该这样做吗?

public interface ICalc
{
    int AddNumbers(int a, int b);
}

public class AsyncCalc
{
    private readonly ICalc _calc;
    public delegate void ResultProcessor(int result);
    public delegate int AddNumbersAsyncCaller(int a, int b);

    public AsyncCalc(ICalc calc)
    {
        _calc = calc; 
    }

    public void AddNumbers(int a, int b, ResultProcessor resultProcessor)
    {
        var caller = new AddNumbersAsyncCaller(_calc.AddNumbers);
        caller.BeginInvoke(a, b, new AsyncCallback(AddNumbersCallbackMethod), resultProcessor);
    }

    public void AddNumbersCallbackMethod(IAsyncResult ar)
    {
        var result = …
Run Code Online (Sandbox Code Playgroud)

.net c# unit-testing asynchronous

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

标签 统计

.net ×1

asynchronous ×1

c# ×1

unit-testing ×1