Как выполнить модульное тестирование для определенной функции в настольном приложении c #? - PullRequest
0 голосов
/ 24 октября 2018

У меня есть функция с именем LoadCitation.

public void LoadCitation()
    {

        cmd = new SqlCommand("select * from tbl_Users where isLogin=1", con);
        sqlDataAdapter = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        sqlDataAdapter.Fill(ds);
        String username = ds.Tables[0].Rows[0]["username"].ToString();
        sqlDataAdapter = new SqlDataAdapter("select id,title,author1_fname,author1_lname,author2_fname,author2_lname,author3_fname,author3_lname,doctype,year,publisher,abstract,nameofdoc,issue,volume,pgno,url,accessdate,notes,tag from tbl_Citation  where username ='" + username + "'", con);
        DataSet = new DataSet();
        con.Open();
        sqlDataAdapter.Fill(DataSet, "tbl_Citation");
        con.Close();

        dgeviewcitation.DataSource = DataSet;
        dgeviewcitation.DataMember = "tbl_Citation";
    }

Я хочу выполнить модульное тестирование для этого метода.

[TestClass()]
public class EditcitationTests
{

    [TestMethod()]
    public void LoadCitationTest()
    {

    }
}

Я создал метод, но не знал, что написатьвнутри функции для модульного тестирования ...

1 Ответ

0 голосов
/ 24 октября 2018

Как написано, этот метод не тестируется модулем.

Это потому, что он сильно зависит от внешнего ресурса.Что, если тест был выполнен в среде, в которой не была установлена ​​эта БД?Как узнать, какие данные будут в БД?Модульные тесты никогда не должны покидать свой класс (и любые имитации).

Итак, во-первых, вам нужно поместить этот SQL в сервис, который внедряется в вашу форму (также исправьте уязвимость SQL-инъекций, пока вы в ней).!).Тогда ваш тест будет mock этой службы (используя что-то вроде NSubstitute или Moq), и вы сможете убедиться, что данные, которые возвращает mock, правильно хранятся в dgeviewcitation.

Примечаниечто пользовательские интерфейсы, как правило, являются ужасными кандидатами для юнит-тестов, правильный подход состоит в том, чтобы сделать их очень тонким (как можно тонким) слоем над вашей реальной логикой, а затем провести юнит-тестирование логики.Архитектурные образцы, такие как MVVM, пытаются помочь с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...