簡體   English   中英

c#, nUnit 如何驗證另一個class的方法是否被調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM