我有一个方法如下。
我想为下面的方法写两个测试用例。
1) 提交数据的成功事务
2) 具有回滚数据的失败事务
我如何写一个涉及事务的测试用例,并成功和失败?
public async Task<List<string>> UpdateRequest(MetaData data, List<string> Ids, string requestedBy)
{
var transaction = await _databaseUtility.CreateTransaction(ConnectionString);
var messages = new List<string>();
try
{
// Update data
await _testDal.Update(data, requestedBy, transaction);
// Update status
await _sampleDal.UpdateStatus(Ids, requestedBy, transaction);
// Update saved data
await _testDal.UpdateSavedData(data, requestedBy, transaction);
_databaseUtility.CommitTransaction(transaction);
}
catch (Exception exception)
{
_databaseUtility.RollbackTransaction(transaction);
}
return messages;
}
您可以通过使用NUnit内置的TestCaseSource
属性和TestCaseData
类来实现它。
[TestCaseSource(nameof(TestCases))]
public List<string> TestTransaction(MetaData data, List<string> ids, string requestedBy)
{
return testObject.UpdateRequest(data, ids, requestedBy).GetAwaiter().GetResult();
}
public static IEnumerable TestCases
{
get
{
//successful
yield return new TestCaseData(new MetaData(), new List<string> { "1", "2" }, "test").Returns(new List<string> { "test1", "test2" });
//failed
yield return new TestCaseData(null, new List<string> { "1", "2" }, "test").Returns(new List<string> { "test1", "test2" });
//another failed
yield return new TestCaseData(new MetaData(), new List<string> { "1", "2" }, string.Empty).Returns(new List<string> { "test1", "test2" });
}
}
这里有几点
List
的消息在UpdateRequest
方法中?它只是初始化,不添加值。在上面的代码片段中,从UpdateRequest
方法返回的消息列表仅与预期结果匹配,但您也可以在此处编写任何Asrett
元数据
或请求通过
作为一个选项,您还可以为成功和失败的事务编写单独的测试,并异步调用UpdateRequest
方法。
到目前为止,您还没有共享组件的详细信息,很难对DAL做出假设,但是如果您想为Update
方法使用模拟,您可以尝试Moq库和任务。响应/返回值的FromResult
方法,如本答案所述
我认为你有两个问题:
>
您正在使用async,并在单元测试中等待,这意味着您的代码将在任何事情真正完成之前继续运行。
您可以阅读https://johnthiriet.com/removing-async-void/#我会解释捕获,确保
代码>等待_testDal。Update函数返回一个任务。然后你可以用_testDal调用它。更新(数据,请求,事务)。
和wait
调用您的常规代码。这将使您的测试代码等待更新完成,而常规代码保持原样。
我会使用类似NSubstitute的模拟服务https://nsubstitute.github.io/为了模仿这些反应。模拟服务将使用反射替换实现_testDal的接口或类
通过这种方式,当调用Update()函数时,可以向其传递某些参数,并在将这些参数传递到函数中时引发异常
并传递另一组参数,并为它们返回正确的消息。
如果您希望传递不同的参数,您可以使用NUnitTestCase(new[]params...)
并将不同的参数集传递给相同的单元测试。
Android Studio 1.1 添加了单元测试支持,详细请看 Unit testing support。本章的其余部分描述的是 “instrumentation tests”。利用 Instrumentation 测试框架可以构建独立的测试 APK 并运行在真实设备(或模拟器)中进行测试。
英文原文:http://emberjs.com/guides/testing/unit/ 单元测试用于测试代码的一个小片段,确保其功能正常。与集成测试不同,单元测试被限定在一个范围内,并且不需要Ember应用运行。 全局 vs 模块 过去如果没有作为一个全局变量加载整个Ember应用,要对应用进行测试非常困难。通过使用模块(CommonJS,AMD等)来编写应用,可以只加载被测试的部分,而不用将其
Spring对MockMvc有2个设置: 独立设置 WebApplication Context安装 一般来说,MockMvc用于哪种测试?单元还是集成?或者两者兼而有之? 使用独立设置(运行在Spring应用程序上下文之外)允许您编写单元测试,而使用WebApplication Context设置您可以编写集成测试,这是对的吗?
我的spark应用程序中有一个方法从MySQL数据库加载数据。该方法看起来如下所示。 该方法除了执行方法并从数据库加载数据外,其他什么都不做。我该如何测试这种方法呢?标准方法是创建对象的模拟,该对象是的实例。但是由于有一个私有构造函数,所以我无法使用Scalamock来模拟它。 这里的主要问题是,我的函数是一个纯粹的副作用函数(副作用是从关系数据库拉数据),如果我在嘲笑时遇到问题,我如何单元测试这
我有一个应用程序,使用经典的Spring配置与xml,它可以使用Spring启动仅用于单元测试? 像这样: