![](/img/trans.png)
[英]moq - how to verify method has not been called if the class swallows exceptions
[英]c#, nUnit How to verify if the method from another class is been called
我正在進行 .NET CORE 3.1 nUnit 測試。 我有 class ClassX
,其構造函數中注入了ServicesClassX
接口。 在 ClassX 中,有一個私有方法,它從 ServiceClassX 調用公共方法。 我想知道,我如何才能驗證調用了 ServiceClassX 中的這個方法??
我需要測試ServiceClassX.ProcessAzureMessage(message)
方法是否被調用/驗證。
ClassX
public class ClassX
{
private readonly IServiceClassX ServiceClassX;
public ClassX(IServiceClassX services){
ServiceClassX = services;
}
public Customer Run(){
var cus = MethodX();
return cus;
}
private Customer MethodX(){
bool valueExit = true;
string message = "myRecord";
if(valueExit){
ServiceClassX.ProcessAzureMessage(message);
}
}
nUnit
[TestFixture]
public class ClassXTests
{
private readonly ClassX _sut;
private readonly Mock<IServiceClassX> _serviceClassXMoq;
public ClassXTests(){
this._sut = new ClassX(_serviceClassXMoq.Object)
}
[Test]
public void Test1()
{
var customer = _sut.();
_serviceClassXMoq.Verify(?????????
}
由於您沒有指定您正在使用或必須使用最小起訂量,因此我將建議一條略有不同的路線。 就個人而言,我更喜歡 FakeItEasy 而不是 Moq,因為我覺得它使這種類型的測試更容易,並且在您通讀它時它的實現方式更有意義。
這是一個示例,說明如何使用您提供的代碼完成此操作。
using FakeItEasy;
public class ClassXTests
{
private IServiceClassX _serviceClass;
private ClassX _sut;
public ClassXTests()
{
_serviceClass = A.Fake<IServiceClassX>();
this._sut = new ClassX(_serviceClass)
}
[Test]
public void Test1()
{
var customer = _sut.(); //Call your _sut method
//Verify the Verify method was called with any parameter of type MyType
A.CallTo(() => _serviceClass.Verify(A<MyType>._)).MustHaveHappened();
}
}
A<MyType>._
是A<MyType>.Ignored
的簡寫。 當斷言對方法的調用發生時,您可以選擇為參數傳遞一個特定的預期值,或者您可以這樣做。忽略它會告訴它不要關心傳入的參數值,只關心方法是叫什么東西。
如果你有
public class Foo
{
public bool Verify(Bar bar);
}
public class Bar
{
public string Name { get; set; }
}
您的測試可能是使用名稱“KZ”調用了 Verify,因此您可以這樣做。
A.CallTo(() => _serviceClass.Verify(A<Bar>.That.Matches((x => x.Name.StartsWith("K")).MustHaveHappened();
它們也有一些固定的匹配函數,但都有詳細的記錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.