C# 如何为没有输入和输出的方法编写单元测试?
我的项目是一个bot电报。我有一个名为C# 如何为没有输入和输出的方法编写单元测试?,c#,unit-testing,telegram-bot,C#,Unit Testing,Telegram Bot,我的项目是一个bot电报。我有一个名为Mainclass的类。我想测试它的一个方法(SubmitNewsGetType)。这个方法没有输入和输出。这个方法检查从用户收到的消息并发送合适的响应。这是我对类和方法的辩护。 public class MainClass { enum state : int { _firstState = 0, _submitNewsGetType = 1, _submitNewsGetNews = 11,
Mainclass
的类。我想测试它的一个方法(SubmitNewsGetType
)。这个方法没有输入和输出。这个方法检查从用户收到的消息并发送合适的响应。这是我对类和方法的辩护。public class MainClass
{
enum state : int
{
_firstState = 0,
_submitNewsGetType = 1,
_submitNewsGetNews = 11,
_reservationGym = 2,
_reservationGymGetSans = 22,
_pollingForFood = 3,
_appointment = 4,
_cancelingReservation = 5,
_cancelingAppointment = 6,
Registeration = 7
};
public TelegramBot bot;
private int stateBot;
public Message sendMessage;
private string tempString;
public Message message;
private MessageTarget target;
public void SubmitNewsGetType()
{
if (message.Text.Contains("/submitnews"))
{
sendMessage = bot.SendMessage(target, "Please select a type news: \n/Elmi\n/Farhangi\n/Honari\n/Amoozeshi\n/Varzeshi\n\n/Return");
}
else if (message.Text.Contains("/Elmi") ||
message.Text.Contains("/Farhangi") ||
message.Text.Contains("/Honari") ||
message.Text.Contains("/Amoozeshi") ||
message.Text.Contains("/Varzeshi"))
{
sendMessage = bot.SendMessage(target, "Please enter your news: \n\n/Return");
stateBot = (int)state._submitNewsGetNews;
tempString = message.Text;
}
else
{
bot.SendMessage(target, "Non definded! Please select a type news: \n/Elmi\n/Farhangi\n/Honari\n/Amoozeshi\n/Varzeshi\n\n/Return");
}
}
这是我的单元测试。我的问题是无法初始化消息类型。[TestMethod]
public void SubmitNewsGetNews_Test()
{
MainClass instance = new MainClass();
Message mess_output;
//How to set value for a Message type??
//This line get error
Message mess_input="/submitnews"
string expected="Please select a type news: \n/Elmi\n/Farhangi\n/Honari\n/Amoozeshi\n/Varzeshi\n\n/Return";
if (mess_input is "/submitnews")
{
a.SubmitNewsGetType();
mess_output= a.sendMessage;
Assert.AreEqual(mess_output.Text,expected);
}
else if (mess_input is "/elmi" or "/farhangi" or ...)
else if ....
}
尝试将
Message mess\u input=“/submitnews”
更改为Message mess\u input=新消息(“/submitnews”)代码>另外,您在收到错误的行中缺少分号
这里有一个链接可以解释更多内容:
创建包含电报机器人
功能的接口,并使电报机器人
实现它李>
interface-ITelegramBot
{
Message SendMessage(MessageTarget目标,字符串msg);
}
将bot
成员的类型更改为ITelegramBot
public-ITelegramBot-bot;
创建TelegramBot的“假”类
class:ITelegramBot
{
公共消息返回消息{get;set;}
公共字符串SendedMessage{get;set;}
公共消息发送消息(消息目标,字符串消息)
{
this.SendedMessage=msg;
返回此返回消息;
}
}
测试。尽量使任何逻辑操作远离测试方法。任何逻辑都可能包含bug,测试方法中的bug很难发现。
为你的方法中每一个可能的结果创建自己的测试-你将需要不止一个
[TestMethod]
public void SubmitNewsGetNews\u messagecontainssubmitems\u SendPleaseSelectType()
{
常量字符串SUBMITITEMS=“/submitnews”;
电报BotFake fakebot=新电报BotFake();
MainClass实例=新的MainClass();
instance.bot=fakebot;//分配我们的伪bot
instance.message.Text=SUBMITITEMS;
string expected=“请选择新闻类型:\n/Elmi\n/Farhangi\n/Honari\n/Amoozeshi\n/Varzeshi\n\n/Return”;
SubmitNewsGetType();
//通过检查faking bot.sendeMessage,我们确保执行了正确的方法
AreEqual(instance.bot.sendeMessage,应为);
}
Message类来自telegrambotsharp
。这不是c#中的类。
可能与