1

Тема: Написати код для теста.

Цей код перевертає трьохзначні числа.
Потрібен код для теста цієї програми в VS 2022.

using System;
 
namespace Program1
{
    class Program
    {
        static void Main(string[] args)
        {
            int v = 654;
            int x = (int)Math.Log10(v) + 1;
            int result = 0;
            for (int i = 0; i < x; i++)
            {
                result = result * 10 + (v % 10);
                v /= 10;
            }
            Console.WriteLine("Результат");
            Console.WriteLine(result);
            Console.ReadKey();
        }
    }
}

2

Re: Написати код для теста.

А де ваші спроби написати ці тести? В чому питання?

3

Re: Написати код для теста.

Моя спроба написати тест.

using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace TestProject1
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            int v = 123;
            int result = Program1.Program.Main(v);
            Assert.AreEqual(321, result);
        }
    }
}

4 Востаннє редагувалося koala (02.02.2022 16:21:03)

Re: Написати код для теста.

Вибачте, а чим саме вас не влаштовує цей код?
Розумієте, у вас є завдання. Якщо проблема в тому, що вам ліньки - пошукайте мотиваційний форум. А якщо проблема в тому, що ви в чомусь не можете розібратися - то напишіть про те, в чому ви вже розібралися і що саме заважає вам рухатися далі.

Наприклад, компілятор на ваш код виводить повідомлення про помилку і ви не розумієте, чому вона виникає - це хороше питання, але ж ви не пишете про жодні помилки.

Подякували: 0xDADA11C71

5

Re: Написати код для теста.

isopesku05 написав:
using System;
 
namespace Program1
{
    class Program
    {
        static void Main(string[] args)
        {
            int v = 654;
            int x = (int)Math.Log10(v) + 1;
            int result = 0;
            for (int i = 0; i < x; i++)
            {
                result = result * 10 + (v % 10);
                v /= 10;
            }
            Console.WriteLine("Результат");
            Console.WriteLine(result);
            Console.ReadKey();
        }
    }
}

Цей код перевертає трьохзначні числа.

Це не так. Функція Main в цьому коді повертає нічого (void).

Краще користувати int

static int Main(string[] args) {
    // code ..
    return 0; // if ok
}

це дозволить повертати код помилки у випадках коли це необхідно.

isopesku05 написав:

Потрібен код для теста цієї програми в VS 2022.

Не викликайте System.Console.ReadKey();. Це створює проблему для автоматизації тестуваня.
System.InvalidOperationException: Cannot read keys when either application does not have a console or when console input has been redirected from a file.

Як варіант, можна зробити щось таке:

using List = System.Collections.Generic.List<string>;
using static System.Console;
using static System.ConsoleColor;

namespace Test1 {
    class Program {
        static int Main(string[] args) {
            List skip = new List() {
                "Результат"
            };
            string s = ReadLine();
            while(skip.Contains(s)) {
                ForegroundColor = Yellow;
                Write("Skipped: ");
                ResetColor();
                WriteLine("\"{0}\".", s
                    .Replace("\\", "\\\\")
                    .Replace("\"", "\\\"")
                );
                s = ReadLine();
            }
            if(s.Length != 3) {
                ForegroundColor = Red;
                Write("Test failed: ");
                ResetColor();
                WriteLine("String length is greater than 3. Length: {0}.", s.Length);
                return 1;
            }
            foreach(char ch in s.Trim("+-. \t\r\n".ToCharArray())) {
                if(!char.IsDigit(ch)) {
                    ForegroundColor = Red;
                    Write("Test failed: ");
                    ResetColor();
                    WriteLine("Invalid symbol: '{0}'.", ch);
                    return 2;
                }
            }
            ForegroundColor = Green;
            Write("Test passed: ");
            ResetColor();
            WriteLine("\"{0}\" is valid value.", s);
            return 0;
        }
    }
}

і викликати програму так (bash):

./Program1.exe | ./Test1.exe

або так (dos):

.\Program1.exe | .\Test1.exe

На виході буде щось таке:

Skipped: "Результат".
Test passed: "456" is valid value.

isopesku05 написав:

Моя спроба написати тест.

using Microsoft.VisualStudio.TestTools.UnitTesting;

    [TestClass]

        [TestMethod]

Це юніт тести (1 із).

Подякували: 0xDADA11C71

6

Re: Написати код для теста.

Насправді вам треба виділити задачу в окрему функцію і скоротити Main до чогось на кшталт

        static void Main(string[] args)
        {
            int v = 654;
            int result = FuncReverse(v);
            Console.WriteLine("Результат");
            Console.WriteLine(result);
            Console.ReadKey();
        }

І от після цього функцію FuncReverse можна тестувати.

Подякували: leofun011