C# 如何为没有输入和输出的方法编写单元测试?

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,

我的项目是一个bot电报。我有一个名为
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#中的类。
    可能与