如何对包含结构作为参数的方法进行单元测试?

时间:2017-11-09 14:35:06

标签: c# unit-testing struct

我正在为一个以结构作为参数的方法编写单元测试。

我使用我想在TestClass中测试的方法创建了一个类的实例,但是我无法访问它的struct成员,即使它在类中设置为public。

我错过了什么或者这不可能吗?

以下是该类的代码:

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

2 个答案:

答案 0 :(得分:2)

您需要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());

答案 1 :(得分:0)

您必须以这种方式访问​​您的结构:

var info = new Patient.patientInfo();

此结构不是成员 - 它的定义只是嵌套,因此您必须指定其包含的类(Patient.)才能访问。

请改为尝试:

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

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

现在您可以访问您的会员:

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