gpt4 book ai didi

c# - 带有catch的catch语句中的单元测试代码

转载 作者:行者123 更新时间:2023-12-03 08:06:42 26 4
gpt4 key购买 nike

有没有一种方法可以在catch语句中测试代码,诀窍是catch以throw结尾,这就是问题的解决之道。因此,问题是,是否有一种方法可以避免在运行我的Test方法时抛出该异常,或者在我的测试中使其适应?

下面的方法只是简单地更新值,并且在捕获时具有throw

public void UpdateCase(LinqToSQLModelName record, IProgress<string> statusReporter)
{

try
{
statusReporter.Report(record.Reference);
_service.PushToService(record);
record.ProcessedDate = DateTime.Now;
record.StatusId = (int)Status.Processed;
}
catch (Exception ex)
{

record.StatusId = (int)Status.Fail;
record.ErrorExceptions = ex.StackTrace;
record.ProcessedDate = DateTime.Now;
Result = false;

throw ex;//How do dodge this when running my test/ Accomodate it on my Test
}
finally
{
_db.SubmitChanges();
}

}

我需要现在测试捕获部分,在下面进行测试
 [TestMethod()]
public void UpdateCaseErrorTest()
{

var repository = new Mock<IDataContext>();
var errorLoggerRepository = new Mock<IExceptionLogger>();
var serviceRepository = new Mock<IServiceInterface>();
repository.Setup(m => m.Get()).Returns(new
ManualWithDrawDataContext());

repository.Setup(m => m.GetCouncilRefundRecord())
.Returns(new LinqToSQLModelName
{
refrence= "10",
Reason = "Reason",
DateCaptured = DateTime.Now,

});

var sut = new DataContext(repository.Object.Get(), serviceRepository.Object, errorLoggerRepository.Object);

sut.UpdateCase(repository.Object.GetCouncilRefundRecord(), null);//This null allows me to go to the catch

Assert.IsFalse(sut.Result);
}

最佳答案

不,您无法跳过catch的throw语句。但是,您可以在单元测试方法上附加ExpectedExceptionAttribute,以表明在执行测试方法期间可能会出现异常。您可以在here上了解有关ExpectedExceptionAttribute的信息。

    [TestMethod()]
[ExpectedException(typeof(Exception))]
public void UpdateCaseErrorTest()
{

var repository = new Mock<IDataContext>();
var errorLoggerRepository = new Mock<IExceptionLogger>();
var serviceRepository = new Mock<IServiceInterface>();
repository.Setup(m => m.Get()).Returns(new
ManualWithDrawDataContext());

repository.Setup(m => m.GetCouncilRefundRecord())
.Returns(new LinqToSQLModelName
{
refrence= "10",
Reason = "Reason",
DateCaptured = DateTime.Now,

});

var sut = new DataContext(repository.Object.Get(), serviceRepository.Object, errorLoggerRepository.Object);

sut.UpdateCase(repository.Object.GetCouncilRefundRecord(), null);//This null allows me to go to the catch

Assert.IsFalse(sut.Result);
}

另外,我建议不要捕获一般异常,而应定义具有特定异常的属性。

关于c# - 带有catch的catch语句中的单元测试代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50964652/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com