Не уверен, как проверить строку кода в C # - PullRequest
0 голосов
/ 23 октября 2011

У меня двойная проверка команды throw после if (команда [0] == '(')). Я считаю, что утверждение if означает, что если первый символ в команде не равен равному), выдается ошибка Я пробовал несколько тестов без а), но до сих пор не смог выполнить команду броска. Любые идеи.

private double ParseTerm(ref string command)
    {
        double returnValue=0;
        if (command.Length != 0)
        {
         if (command[0] == '('))
            {
                command = command.Substring(1,command.Length -1);   // skip the open paren
                returnValue= ParseExpr(ref command);
                if (command[0] != ')')                              // make sure there is a close paren for each open parenthesis
                    throw new System.FormatException();
                command = command.Substring(1,command.Length -1);   // skip the close paren
            } 
        return returnValue;
    }

Вот ParseExpr

private double ParseExpr(ref string command)
    {
        double op, op2;

        if (command == "")                              // Handle the empty expression case
            return 0;

        op = ParseFactor(ref command);                  // parse left side of expression

        if (command != "")                              // if a right side exists, parse it
        {               

            if (command[0] == '+')                      // test for '+'
            {           
                command = command.Substring(1,command.Length -1);   // skip to +

                if (command.Length == 0)    
                    throw new System.FormatException();     // no right hand side operator

                op2 = ParseExpr(ref command);               // parse remainder of the expression
                op +=  op2;
            } 
            else if (command[0] == '-')
            {                   
                command = command.Substring(1,command.Length -1);
                if (command.Length == 0)
                    throw new System.FormatException();
                op2 = ParseExpr(ref command);           
                op -=  op2;
            } 
        }
        return op;
    }


    private double ParseFactor(ref string command)
    {
        double op, op2;
        op = ParseExp(ref command);
        if (command != "")
        {               
            if (command[0] == '*')
            {                   
                command = command.Substring(1,command.Length -1);
                if (command.Length == 0)
                    throw new System.FormatException();
                op2 = ParseFactor(ref command);         
                op *=  op2;
            } 
            else if (command[0] == '/' || command[0] == '\\')
            {                   
                command = command.Substring(1,command.Length -1);
                if (command.Length == 0)
                    throw new System.FormatException();
                op2 = ParseFactor(ref command);     

                if (op2 == 0)                                   // don't allow divide 0
                    throw new System.DivideByZeroException();   // the division operation won't return
                op /=  op2;                                     // throw the exception since we are using doubles
            }               
            else if (command[0] == '%')
            {                   
                command = command.Substring(1,command.Length -1);
                if (command.Length == 0)
                    throw new System.FormatException();
                op2 = ParseFactor(ref command);                             
                op = (int)op % (int)op2;
            } 
        }
        return op;
    }

1 Ответ

2 голосов
/ 23 октября 2011

Вы имеете в виду UnitTest? Если да:

[TestMethod]
[ExpectedException(typeof(FormatException))]
public void ParseTerm_when_the_last_char_is_not_a_close_parenthesis_should_throw_FormatException()
{
    //Call the method here:
    ParseTerm("(some string without close parenthesis");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...