NUnit-用于测试事务的单元测试用例 - c#

我有如下方法。

我想为以下方法编写两个测试用例。

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;
}

参考方案

我认为您在这里有2个问题:

您在单元测试中使用了异步并等待,这意味着您的代码将在真正完成之前继续运行。
您可以阅读https://johnthiriet.com/removing-async-void/#
我会解释这个问题
确保await _testDal.Update(data, requestedBy, transaction); Update()函数返回一个Task
然后,可以使用_testDal.Update(data, requestedBy, transaction).Wait()对其进行调用以进行单元测试。
await调用您的常规代码。这将使您的测试代码等待更新完成,而常规代码保持不变。
我将使用诸如NSubstitute https://nsubstitute.github.io/之类的模拟服务来模拟响应。模拟服务将使用反射来替换实现_testDal的接口或类。
这样,当您调用Update()函数时,可以将某些参数传递给它,并在将这些参数传递给函数时引发异常。
并传递另一组参数,并为它们返回正确的消息。

如果您希望传递不同的参数,则可以使用Nunit TestCase(new[] params...)并将一组不同的参数传递给同一单元测试。
但是对于PassTest和FailTest,我将使用2个或更多不同的测试。

单元测试休息点 - java

我已经用Java编写了REST端点。应用程序中有c#代码使用RestClient调用这些端点。我正在考虑为这些编写单元测试。只是想知道什么是最好的方法? Moq框架或NUNIT还是其他?有任何想法吗?谢谢。 参考方案 如果要在Java中测试REST端点,则可以使用Mockito(https://site.mockito.org/)之类的模拟框架来模拟所需的任…

PHPUnit测试的目录布局? - php

我是从事PHP项目的长期Java程序员,并且试图使PHPUnit正常工作。使用Java进行单元测试时,通常将测试用例类和常规类放在单独的目录中,如下所示-/src MyClass.java /test MyClassTest.java 等等。使用PHPUnit进行单元测试时,遵循相同的目录结构是常见的做法,还是有更好的方法来布置测试类?到目前为止,我可以使“…

是否可以在静态类中注入模拟 - java

我有静态课。我正在为使用Junit和Mockito的静态方法之一编写JUnit。在该方法中,将调用其他类级别的静态变量的函数。我想模拟这个函数调用。我的代码如下,class ABC { public static SomeVariable var; public static Value getSomething() { try { Value val = …

未处理的异常Junit - java

我无法运行测试,因为此语句decorator.decorate(new EncoderColumnDecorator())中的测试出现红色弯曲的错误行,要求我使用try / catch或add throws。 这是错误消息。 当我已经具有“ expected”属性时,为什么必须放置try / catch或引发异常我的单元测试:@Test(expected=D…

覆盖仅在C#中测试所需的Equals和GetHashcode方法的最佳位置 - c#

我需要覆盖Equals()和GetHashCode(),以便可以在单元测试中比较同一类的两个对象。假设我在生产中具有类:MyClass,目前对覆盖上述方法没有特殊要求。但是,在测试中,我想使用overridden Equals比较它们。我是不是该:直接在MyClass中实现方法从MyClass创建一个派生类,该类包含重写,然后在我的测试中适当地投射MyCla…