我有一个名为ErrorMessageTest
的类,它有一些属性。
我有另一个名为ErrorHandlerTest的类和一个名为HandleErrorTest
的方法,它将上面作为参数并在下面的结构中创建一个类。
public class ErrorMessageTest
{
private string EventId;
private string TransactionId;
private string Timestamp;
private string Component;
private string UserId;
private string Message;
private string Exception;
}
public static class ErrorHandlerTest
{
public static void HandleErrorTest(string EventId, string TransactionId,
DateTime Timestamp, string Component,
string UserId)
{
}
}
我需要返回一个ErrorMessage
对象,但我不知道如何创建它的实例。
答案 0 :(得分:3)
你有一些基本的错误。
首先,您的所有字段都是私有的。相反,您将要创建公共属性:
public class ErrorMessage
{
public string EventId { get; set; }
public string TransactionId { get; set; }
public DateTime Timestamp { get; set; }
public string Component { get; set; }
public string UserId { get; set; }
public string Message { get; set; }
public Exception Exception { get; set; }
}
现在,在您的HandleError
方法中,您需要返回类型ErrorMessage
而不是void
。 void
表示无返回类型。如果您还想将其设为static
课程,请执行以下操作:
public static class ErrorHandler
{
public static ErrorMessage HandleError(string eventId, string transactionId,
DateTime timeStamp, string component,
string userId)
{
return new ErrorMessage
{
EventId = eventId,
TransactionId = transactionId,
Timestamp = timeStamp,
Component = component,
UserId = userId
};
}
}
答案 1 :(得分:2)
在您必须设置私有字段进行测试的情况下,我建议使用Microsoft.VisualStudio.TestTools.UnitTesting包中的PrivatObject-Class。它有一个SetField方法,允许您设置私有字段。
这篇文章How to instantiate PrivateType of inner private class讨论了PrivatObject和PrivateType的主题。 PrivateObject用于访问实例的私有成员,而PrivateType用于静态类成员。
但请注意,通过反射设置私有字段(如PrivateObject一样)的缺点是,您的测试需要了解ErrorMessage类的内部,这违反了测试合同的原则(公共类)成员,接口)。
答案 2 :(得分:0)
尽管您的所有变量在ErrorMessageTest类中都是私有的。你需要公开发布它。 你可以这样做 -
public class ErrorMessage
{
public string EventId;
public string TransactionId;
public DateTime Timestamp;
public string Component;
public string UserId;
public string Message;
public string Exception;
}
public class ErrorHandlerTest
{
public static ErrorMessage HandleErrorTest(string EventId, string TransactionId,
DateTime Timestamp, string Component,
string UserId)
{
return new ErrorMessage()
{
Component = Component,
EventId = EventId,
Timestamp = Timestamp,
TransactionId = TransactionId,
UserId = UserId
};
}
}
答案 3 :(得分:0)
我希望您需要在方法HandleErrorTest()中返回 ErrorMessageTest 类。:)如果是这样,只需将方法的返回类型更改为 ErrorMessageTest ,如< / p>
public static ErrorMessageTest HandleErrorTest(string EventId, string TransactionId,
DateTime Timestamp, string Component,
string UserId)
{
}
并创建一个ErrorMessageTest类的实例,并形成像这样返回的对象
return new ErrorMessageTest
{
EventId = eventId,
TransactionId = transactionId,
Timestamp = timeStamp,
Component = component,
UserId = userId
};
现在你的方法看起来像
public static ErrorMessageTest HandleErrorTest(string EventId, string TransactionId,
DateTime Timestamp, string Component,
string UserId)
{
return new ErrorMessageTest
{
EventId = eventId,
TransactionId = transactionId,
Timestamp = timeStamp,
Component = component,
UserId = userId
};
}
答案 4 :(得分:-1)
在ErrorHandlerTest中实例化ErrorMessageTest add:
ErrorMessageTest errorMessageTest = new ErrorMessageTest();
这将创建一个ErrorMessageTest类的实例,并且可以通过本地变量errorMessageTest访问,您可以随意使用它。
编辑:错误的名称复制粘贴,替换为errorMessageTest