簡體   English   中英

如何對包含結構作為參數的方法進行單元測試?

[英]How to unit test a method that contains a struct as a parameter?

我正在為采用結構作為參數的方法編寫單元測試。

我使用要在TestClass中測試的方法創建了該類的實例,但是即使在該類中將其設置為public,也無法訪問其struct成員。

我錯過了什么嗎?

這是該類的代碼:

public class Patient
{
    public struct patientInfo
    {
        public string firstName;
        public string lastName;
        public string telephoneNumber;
        public string dateOfBirth;
        public string gender;         
        public string address;
    }

 // Method I want to test:
 public bool Register(patientInfo patientDetails)
 {
      // Method code in here.
 }

測試類的代碼:

[TestClass]
public class RegisterPatientTest
{       
    [TestMethod]
    public void RegisterMethodTest()
    {

        Patient TestPatient = new Patient();

        TestPatient. //Can't access the struct member...            

        // What I want to use the struct for but gives error:  
        Assert.IsTrue(TestPatient.Register(patientDetails) == false);    
    }
}

您將需要Patient.patientInfo來訪問該結構。 該結構不屬於您的類的特定實例。 實際上,您需要周圍類的名稱作為內部類的標識,就像周圍類將是一個namespace 因此,要使用new Patient.patienInfo { ... }創建結構的實例。

除此之外,您可以使用Assert.IsFalse來使代碼更清晰。 所以你得到這個:

[TestMethod]
public void RegisterMethodTest()
{
    var p = new Patient();

    Patient.patientInfo info;
    info.firstName = ...

    // What I want to use the struct for but gives error:  
    Assert.IsFalse(p.Register(info));    
}

但是,我完全看不到使用此嵌套結構有什么用。 您可以直接在類中擁有屬性,從而使代碼結構更加容易:

public class Patient
{
    public string firstName;
    public string lastName;
    public string telephoneNumber;
    public string dateOfBirth;
    public string gender;         
    public string address;
}

現在,只需在測試中調用此命令即可:

var p = new Patient { firstName = ... };
Assert.IsFalse(myPatient.Register());

您必須通過以下方式訪問您的結構:

var info = new Patient.patientInfo();

該結構不是成員-它的定義只是嵌套的,因此您必須指定其包含類( Patient. )才能進行訪問。

嘗試以下方法:

public class Patient
{
    // Member:
    public PatientInfo Info;

    // Struct definition:
    public struct PatientInfo // Use UpperCamelCase
    {
        // ...
    }
}

現在,您可以訪問您的成員:

new Patient().Info = //...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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