我试图了解C#中的async-await功能.我编写了下面的代码来异步运行几个任务 - 目前他们所做的只是在一段时间后引发一个事件.
public class Program
{
public static Stopwatch Watch = new Stopwatch();
public static void Main(string[] args)
{
AsyncClass asyncClass = new AsyncClass();
asyncClass.WaitSecondsAsyncCompleted += asyncClass_WaitSecondsAsyncCompleted;
List<Task> tasks = new List<Task>();
Watch.Start();
for (int i = 1; i < 6; i++)
{
tasks.Add(asyncClass.WaitSecondsAsync(i, Watch));
}
Task.WaitAll(tasks.ToArray());
Console.ReadLine();
}
private static void asyncClass_WaitSecondsAsyncCompleted(int i)
{
Console.WriteLine("{1} : Async Method Called: waited for {0} seconds", i, Watch.ElapsedMilliseconds);
}
}
public class AsyncClass
{
public event Action<int> WaitSecondsAsyncCompleted;
public async Task …Run Code Online (Sandbox Code Playgroud) 在过去,当我实施单元测试时,我一直在努力为数据访问层设置"体面"的单元测试,因为它们通常将数据库作为外部依赖.在理想的世界中,我会模拟存储过程调用,以便删除外部依赖项.
但是,我一直无法解决如何使用MOQ模拟框架,或找到任何其他支持此框架的框架.相反,我已经恢复创建一个包含已知数据的脚本化测试数据库(这样我总能得到我期望的输出),但这与模拟该层略有不同.
任何人都可以建议如何模拟数据访问层的这一部分[我知道实体框架https://effort.codeplex.com/存在]?
public object RunStoredProc()
{
//Some Setup
using (SqlConnection conn = new SqlConnection(CONNNECTION_STRING))
{
using (SqlCommand comm = new SqlCommand("storedProcName", conn))
{
conn.Open();
comm.CommandType = CommandType.StoredProcedure;
using (SqlDataReader reader = comm.ExecuteReader())
{
while (reader.Read())
{
//Logic
}
}
}
}
//Return object based on logic
}
Run Code Online (Sandbox Code Playgroud)
那么如何模拟存储过程输出以SQLDataReader包含指定的数据.在更高的级别,我可以模拟该RunStoredProc()方法 - 但这无助于我测试该方法中的逻辑是否正确.或者,我可以将其SQLReader剥离成另一种方法
public object RunStoredProc()
{
//Some Setup
List<object> data = GetData();
//Logic
//Return object based on logic
}
private List<object> …Run Code Online (Sandbox Code Playgroud)