powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / Тестирование и QA [игнор отключен] [закрыт для гостей] / тестирование класса с помощью NUnit
8 сообщений из 8, страница 1 из 1
тестирование класса с помощью NUnit
    #33744597
sashenka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошу строго не судить.. только разбираюсь с тестированием..
прошу спецов посмотреть на пример тестирования и дать свои замечания что и где я не так сделал?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
[TestFixture]
    public class AnswerDB
    {
        string ConnectionString = null;
        [SetUp]
        public AnswerDB(string ConnectionString)
        {
            this.ConnectionString = ConnectionString;

        }
        //заносим ответы в БД 
        [Test]
        public void InsertData(string guid, string answer)
        {
            SqlConnection sqlconn = new SqlConnection(ConnectionString);
            Assert.IsNull(ConnectionString, "Строка соединения не получена");
            try
            {
                sqlconn.Open();
            }
            catch (Exception ex)
            {
                Assert.Fail("Соединение не установлено");
                throw new Exception(ex.Message);
            }
            SqlCommand sqlcomm = new SqlCommand("insert into t_answer (guid, answer) values(@guid,@answer)", sqlconn);
            sqlcomm.Parameters.Clear();
            sqlcomm.Parameters.Add(new SqlParameter("@guid", DbType.String));
            sqlcomm.Parameters.Add(new SqlParameter("@answer", DbType.String));
            sqlcomm.Parameters[ 0 ].Value = guid;
            sqlcomm.Parameters[ 1 ].Value = answer;
            Assert.IsNull(guid, "Не получен параметр SessionID");
            Assert.IsNull(answer, "Не получен параметр answer");
            try
            {
                sqlcomm.ExecuteNonQuery();
            
            }
            catch (Exception ex)
            {
                //если в классе возникла ошибка перазватываем и 
                //откатываем обновление Бд 
                //+ генерим новое исключения для перехвата его в Global.asax
                Assert.Fail("Ошибка выполения запроса вставки данных  в БД");
                throw new Exception(ex.Message);
            }
            finally
            {
                sqlconn.Close();
            }



        }

    }

...
Рейтинг: 0 / 0
тестирование класса с помощью NUnit
    #33744779
Артем1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Советую скачать какой-нить популярный opensource проект (NHibernate, к примеру, или BLToolkit с rsdn.ru) и посмотреть в исходниках их тесты. Я их использовал в качестве примера - мне понравились.
...
Рейтинг: 0 / 0
тестирование класса с помощью NUnit
    #33744826
sashenka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что то я там не увидел тестов.. хотя пример не качал а посмотрел то что там на сайьте опубликовано
...
Рейтинг: 0 / 0
тестирование класса с помощью NUnit
    #33744864
Артем1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для nhibernate-1.0.2.0.zip - src\NHibernate.Test\NHibernate.Test-1.1.csproj - проект с тестами
...
Рейтинг: 0 / 0
тестирование класса с помощью NUnit
    #33744873
Артем1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот для примера один тест:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
using System;
using System.Collections;

using NHibernate.DomainModel;
using NUnit.Framework;

namespace NHibernate.Test 
{
	[TestFixture]
	public class SimpleTest : TestCase 
	{
		private DateTime testDateTime = new DateTime( 2003 ,  8 ,  16 );
		private DateTime updateDateTime = new DateTime( 2003 ,  8 ,  17 );

		protected override IList Mappings
		{
			get
			{
				return new string[] { "Simple.hbm.xml" };
			}
		}

		[Test]
		public void TestCRUD() 
		{
			long key =  10 ;
			long otherKey =  9 ;

			using( ISession s1 = OpenSession() )
			using( ITransaction t1 = s1.BeginTransaction() )
			{
				// create a new
				Simple simple1 = new Simple();
				Simple otherSimple1 = new Simple();

				simple1.Name = "Simple 1";
				simple1.Address = "Street 12";
				simple1.Date = testDateTime;
				simple1.Count =  99 ;

				otherSimple1.Name = "Other Simple 1";
				otherSimple1.Address = "Other Street 12";
				otherSimple1.Date = testDateTime;
				otherSimple1.Count =  98 ;

				simple1.Other = otherSimple1;
			
				s1.Save(otherSimple1, otherKey);
				s1.Save(simple1, key);
			
				t1.Commit();
			}

			// try to Load the object to make sure the save worked
			ISession s2 = OpenSession();
			ITransaction t2 = s2.BeginTransaction();
			
			Simple simple2 = (Simple)s2.Load(typeof(Simple), key);
			Simple otherSimple2 = (Simple)s2.Load(typeof(Simple), otherKey);

			// verify each property was saved as expected
			Assert.IsNotNull(simple2, "Unable to load object");
			Assert.IsNotNull(otherSimple2);
			Assert.AreSame(simple2.Other, otherSimple2);

			// update
			simple2.Count =  999 ;
			simple2.Name = "Simple 1 (Update)";
			simple2.Address = "Street 123";
			simple2.Date = updateDateTime;
			
			s2.Update(simple2, key);
			
			t2.Commit();
			s2.Close();

			// lets verify that the update worked 
			ISession s3 = OpenSession();
			ITransaction t3 = s3.BeginTransaction();

//			Simple simple3 = (Simple)s3.Load(typeof(Simple), key);
			Simple simple3 = (Simple)s3.Find( "from Simple as s where s.id = ? and '?'='?'", key, NHibernateUtil.Int64 )[ 0 ];
			Simple otherSimple3;

			Assert.AreEqual(simple2.Count, simple3.Count);
			Assert.AreEqual(simple2.Name, simple3.Name);
			Assert.AreEqual(simple2.Address, simple3.Address);
			Assert.AreEqual(simple2.Date, simple3.Date);
			
			// note that the Other will not be the same object because
			// they were loaded in  2  different sessions
			otherSimple3 = simple3.Other;

			// the update worked - lets clear out the table
			s3.Delete(simple3);
			s3.Delete(otherSimple3);

			t3.Commit();
			s3.Close();

			// verify there is no other Simple objects in the db
			ISession s4 = OpenSession();
			Assert.AreEqual( 0 , s4.CreateCriteria(typeof(Simple)).List().Count);
			s4.Close();

		}

		
		[Test]
		public void SetPropertiesOnQuery()
		{
			DateTime now = DateTime.Now;
			
			ISession s = OpenSession();
			ITransaction t = s.BeginTransaction();
			
			// create a new
			long key =  10 ;
			Simple simple = new Simple();
			simple.Name = "Simple 1";
			simple.Address = "Street 12";
			simple.Date = now;
			simple.Count =  99 ;
			
			s.Save(simple, key);
			
			t.Commit();
			
			t = s.BeginTransaction();

			IQuery q = s.CreateQuery("from s in class Simple where s.Name=:Name and s.Count=:Count");
			q.SetProperties(simple);
			
			Simple loadedSimple = (Simple)q.List()[ 0 ];
			Assert.AreEqual( 99 , loadedSimple.Count);
			Assert.AreEqual("Simple 1", loadedSimple.Name);
			Assert.AreEqual("Street 12", loadedSimple.Address);
			Assert.AreEqual(now.ToString(), loadedSimple.Date.ToString());

			s.Delete(simple);
			
			t.Commit();
			s.Close();
			
		}
	}
}
...
Рейтинг: 0 / 0
тестирование класса с помощью NUnit
    #33745267
sashenka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем1 сенки тя огромное ..
для примера взял BLToolkit
вот что получилось по коду
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
[TestFixture]
    public class AnswerDB
    {
        string ConnectionString = "Data Source=db;Initial Catalog=test;User Id=sa;Password=Z81fdeF%G;";
        public AnswerDB()
        {
            //this.ConnectionString = ConnectionString;

        }
        //заносим ответы в БД 
        [Test]
        public void InsertData()
        {
            string guid = "dfhdfghfdgjhgfjhgjhgf";
            string answer = "Привет";
            SqlConnection sqlconn = new SqlConnection(ConnectionString);
            Assert.IsNotNull(ConnectionString, "Строка соединения не получена");
            try
            {
                sqlconn.Open();
            }
            catch (Exception ex)
            {
                Assert.Fail("Соединение не установлено");
                throw new Exception(ex.Message);
            }
            SqlCommand sqlcomm = new SqlCommand("insert into t_answer (guid, answer) values(@guid,@answer)", sqlconn);
            Assert.AreNotEqual( 0 , sqlcomm.CommandText.Length);
            sqlcomm.Parameters.Clear();
            sqlcomm.Parameters.Add(new SqlParameter("@guid", DbType.String));
            sqlcomm.Parameters.Add(new SqlParameter("@answer", DbType.String));
            sqlcomm.Parameters[ 0 ].Value = guid;
            sqlcomm.Parameters[ 1 ].Value = answer;
            Assert.IsNotNull(guid, "Не получен параметр SessionID");
            Assert.IsNotNull(answer, "Не получен параметр answer");
            Assert.AreEqual( 2 , sqlcomm.Parameters.Count);
            try
            {
                Assert.AreNotEqual( 0 ,sqlcomm.ExecuteNonQuery());
            
            }
            catch (Exception ex)
            {
                //если в классе возникла ошибка перазватываем и 
                //откатываем обновление Бд 
                //+ генерим новое исключения для перехвата его в Global.asax
                Assert.Fail("Ошибка выполения запроса вставки данных  в БД");
                throw new Exception(ex.Message);
            }
            finally
            {
                sqlconn.Close();
            }



        }

    }
при запуске теста получил зеленый свет)
глянь этот код на всякий случай опытным взглядом.. а то от этих тестов зависит примут на работу в софтверную контору или нет ..
...
Рейтинг: 0 / 0
тестирование класса с помощью NUnit
    #33746231
Артем1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всеб-хорошо, но я все-таки советовал бы обратить внимание на цель тестируемого метода.

Т.е. в том примере, который я привел, тестировалась функциональность фреймворка по сохранению объекта в бд. для этого в одном соединении созданный класс сохранялся в бд, в другом соединении его загружали и проверяли, что он правильно сохранился. В твоем коде я что вижу?

1. Проверка на заполненность connectionstring - которая задана константой. Есть сомнения в успешности этой операции? К тому-же проверка уже после создания соединения с этой connectionstring - уж лучше до. а еще лучше вынести в базовый класс, как сделано в том же nhibernate (TestCase). В начале тесте (SetUp) открывать соединение, в конце (TearDown) закрывать.
2. Проверка на успешность открытия соединения - это не относится к сути теста. К тому-же оригинальное исключение теряется путем замены его новым другого типа. зачем?
3.
Код: plaintext
1.
string guid = "dfhdfghfdgjhgfjhgjhgf";
string answer = "Привет";

Код: plaintext
1.
Assert.IsNull(guid, "Не получен параметр SessionID");
Assert.IsNull(answer, "Не получен параметр answer");

Аналогично, зачем проверять результат присвоения? Тут настолько вероятны сбои? :)

В общем я бы переписал где-то так (пишу прямо в форуме без претензии на безошибочность и компилируемость)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
    [TestFixture]
    public class AnswerDB
    {
        string ConnectionString = "Data Source=db;Initial Catalog=test;User Id=sa;Password=Z81fdeF%G;";
        public AnswerDB()
        {

        }

        //Тестируем работу метода добавления данных в БД
        [Test]
        public void InsertData()
        {
            string guid = "dfhdfghfdgjhgfjhgjhgf";
            string answer = "Привет";

            //Сохраняем
            SqlConnection sqlconn = new SqlConnection(ConnectionString);
            SqlCommand sqlcomm = new SqlCommand("insert into t_answer (guid, answer) values(@guid,@answer)", sqlconn);

            sqlcomm.Parameters.Add(new SqlParameter("@guid", DbType.String));
            sqlcomm.Parameters.Add(new SqlParameter("@answer", DbType.String));
            sqlcomm.Parameters[ 0 ].Value = guid;
            sqlcomm.Parameters[ 1 ].Value = answer;

            try {
              sqlconn.Open();
              Assert.AreNotEqual( 0 ,sqlcomm.ExecuteNonQuery());
            }
            finally {
              sqlconn.Close();
            }

            //Загружаем для проверки, что сохранилось все правильно
            SqlConnection sqlConnLoad = new SqlConnection(ConnectionString);
            sqlcomm = new SqlCommand("select guid, answer from t_answer where guid = @guid and answer = @answer)", sqlConnLoad);

            sqlcomm.Parameters.Add(new SqlParameter("@guid", DbType.String));
            sqlcomm.Parameters.Add(new SqlParameter("@answer", DbType.String));
            sqlcomm.Parameters[ 0 ].Value = guid;
            sqlcomm.Parameters[ 1 ].Value = answer;

            try {
              sqlConnLoad.Open();
              SqlDataReader r = sqlcomm.ExecuteReader();
              Assert.IsNotNull(r, "Нет курсора!");
              Assert.AreEqual(true, r.HasRows);
              r.Read();
              Assert.AreEqual(guid, r[ 0 ]);
              Assert.AreEqual(answer, r[ 1 ]);
            }
            finally {
              if (r != null) { r.Close(); }
              sqlConnLoad.Close();
            }

        }

    }
...
Рейтинг: 0 / 0
тестирование класса с помощью NUnit
    #33746470
sashenka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да кое с чем протупил ) ..сенки зараз перепишу..
а проверять загрузилось или нет не нуна это делаеться в другом классе)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Тестирование и QA [игнор отключен] [закрыт для гостей] / тестирование класса с помощью NUnit
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]