Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
2 / 2 / 2
Регистрация: 21.10.2016
Сообщений: 68
1

Unit Tests для проекта с Unit Of Work

24.05.2018, 09:57. Показов 644. Ответов 1
Метки нет (Все метки)

Привет.
Вынужден снова обратиться за помощью.
Пишу блог.
Архитектура такова, что есть IRepository , PostRepository и Unit OfWork.
Я только - только начал знакомиться с unit tests и не могу понять как правильно тестить методы.
От Вас очень прошу помочь с созданием только одного теста - возвращение списка всех постов в блоге, остальные доделаю сам.
Приведу Листинги:

PostController:
C#
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
namespace WebSite.Controllers
{
    public class PostsController : Controller
    {
        readonly UnitOfWork unitOfWork;
 
        public ActionResult Index()
        {
            var postList = unitOfWork.Post.GetList();
            return View( postList );
        }
 
 
        public ActionResult Details( int? id )
        {
            if (id == null)
            {
                return new HttpStatusCodeResult( HttpStatusCode.BadRequest );
            }
            var post = unitOfWork.Post.Get( id );
            if (post == null)
            {
                return HttpNotFound();
            }
            return View( post );
        }
 
        public ActionResult Create()
        {
            return View();
        }
 
 
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(
            [Bind( Include = "Id,Title,Description,Content,Category,PostedDateTime,ModifiedDateTime" )] Post post, HttpPostedFileBase file )
        {
 
            post.Author = User.Identity.Name;
            if (!ModelState.IsValid || file == null)
                return View( post );
            //attach the uploaded image to the object before saving to Database
            post.ImageMimeType = "image / jpeg" /*image.ContentLength*/;
            post.ImageData = new byte[file.ContentLength];
            file.InputStream.Read( post.ImageData, 0, file.ContentLength );
 
            //Save image to file
            var filename = file.FileName;
            var filePathOriginal = Server.MapPath( "~/Images/Original" );
            var savedFileName = Path.Combine( filePathOriginal, filename );
            file.SaveAs( savedFileName );
 
            //Read image back from file and create thumbnail from it
            var imageFile = Path.Combine( Server.MapPath( "~/Images/Original" ), filename );
            using (var srcImage = Image.FromFile( imageFile ))
            using (var newImage = new Bitmap( 100, 100 ))
            using (var graphics = Graphics.FromImage( newImage ))
            using (var stream = new MemoryStream())
            {
                graphics.SmoothingMode = SmoothingMode.AntiAlias;
                graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
                graphics.DrawImage( srcImage, new Rectangle( 0, 0, 100, 100 ) );
                newImage.Save( stream, ImageFormat.Png );
                var thumbNew = File( stream.ToArray(), "image/png" );
                post.ImageThumbnail = thumbNew.FileContents;
            }
            post.PostedDateTime = DateTime.Now;
            unitOfWork.Post.Create( post );
            unitOfWork.Save();
            return RedirectToAction( "Index", "Home" );
        }
 
        [HttpGet]
        public ActionResult Edit( int? id )
        {
            if (id == null)
            {
                return new HttpStatusCodeResult( HttpStatusCode.BadRequest );
            }
            var post = unitOfWork.Post.Get( id );
            if (post == null)
            {
                return HttpNotFound();
            }
            return View( post );
        }
 
 
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit(
            [Bind( Include = "Id,Title,Description,Content,Category,Author,ImageData,ImageThumbnail,ImageMimeType,PostedDateTime,ModifiedDateTime" )] Post post, HttpPostedFileBase file )
        {
            if (!ModelState.IsValid)
                return View( post );
            if (file != null)
            {
                //attach the uploaded image to the object before saving to Database
                post.ImageMimeType = "image / jpeg" /*image.ContentLength*/;
                post.ImageData = new byte[file.ContentLength];
                file.InputStream.Read( post.ImageData, 0, file.ContentLength );
 
                //Save image to file
                var filename = file.FileName;
                var filePathOriginal = Server.MapPath( "~/Images/Original" );
                var savedFileName = Path.Combine( filePathOriginal, filename );
                file.SaveAs( savedFileName );
 
                //Read image back from file and create thumbnail from it
                var imageFile = Path.Combine( Server.MapPath( "~/Images/Original" ), filename );
                using (var srcImage = Image.FromFile( imageFile ))
                using (var newImage = new Bitmap( 350, 200 ))
                using (var graphics = Graphics.FromImage( newImage ))
                using (var stream = new MemoryStream())
                {
                    graphics.SmoothingMode = SmoothingMode.AntiAlias;
                    graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                    graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
                    graphics.DrawImage( srcImage, new Rectangle( 0, 0, 350, 200 ) );
                    newImage.Save( stream, ImageFormat.Png );
                    var thumbNew = File( stream.ToArray(), "image/png" );
                    post.ImageThumbnail = thumbNew.FileContents;
                }
            }
            unitOfWork.Post.Edit( post );
            unitOfWork.Save();
            return RedirectToAction( "Index", "Home" );
        }
 
        public ActionResult Delete( int? id )
        {
            if (id == null)
            {
                return new HttpStatusCodeResult( HttpStatusCode.BadRequest );
            }
            var post = unitOfWork.Post.Get( id );
            if (post == null)
            {
                return HttpNotFound();
            }
            return View( post );
        }
 
        [HttpPost, ActionName( "Delete" )]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed( int id )
        {
            {
                var post = unitOfWork.Post.Get( id );
                unitOfWork.Post.Delete( post );
                unitOfWork.Save();
                return RedirectToAction( "Index" );
            }
        }
        public FileContentResult GetThumbnailImage( int? id )
        {
            var post = unitOfWork.Post.Get( id );
            if (post.ImageThumbnail != null)
            {
                return File( post.ImageThumbnail, post.ImageMimeType );
            }
            else if (post.ImageThumbnail == null && post.ImageData == null)
            {
                var imageFile = Path.Combine( Server.MapPath( "~/Images/Original/NoImageAvailable.jpg" ) );
                post.ImageMimeType = "image / jpeg";
                using (var srcImage = Image.FromFile( imageFile ))
                using (var newImage = new Bitmap( 350, 200 ))
                using (var graphics = Graphics.FromImage( newImage ))
                using (var stream = new MemoryStream())
                {
                    graphics.SmoothingMode = SmoothingMode.AntiAlias;
                    graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                    graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
                    graphics.DrawImage( srcImage, new Rectangle( 0, 0, 350, 200 ) );
                    newImage.Save( stream, ImageFormat.Png );
                    var thumbNew = File( stream.ToArray(), "image/png" );
                    post.ImageThumbnail = thumbNew.FileContents;
                }
                return File( post.ImageThumbnail, post.ImageMimeType );
            }
            else 
            {
                var imageFile = Path.Combine( Server.MapPath( "~/Images/Default" ), post.DefaultImageName );
                using (var srcImage = Image.FromFile( imageFile ))
                using (var newImage = new Bitmap( 350, 200 ))
                using (var graphics = Graphics.FromImage( newImage ))
                using (var stream = new MemoryStream())
                {
                    graphics.SmoothingMode = SmoothingMode.AntiAlias;
                    graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                    graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
                    graphics.DrawImage( srcImage, new Rectangle( 0, 0, 350, 200 ) );
                    newImage.Save( stream, ImageFormat.Png );
                    var thumbNew = File( stream.ToArray(), "image/png" );
                    post.ImageThumbnail = thumbNew.FileContents;
                }
                return File( post.ImageThumbnail, post.ImageMimeType );
            }
        }
        public ActionResult ChangeStatus( int id )
        {
            var post = unitOfWork.Post.Get( id );
            if (post != null && post.IsDeclined || post != null && !post.IsApproved)
            {
                post.IsDeclined = false;
                post.IsApproved = true;
            }
            else if (post != null && post.IsApproved || post !=null && !post.IsDeclined)
            {
                post.IsApproved = false;
                post.IsDeclined = true;
            }
            unitOfWork.Post.Edit( post );
            unitOfWork.Save();
            return RedirectToAction( "Index","Home" );
        }
    }
}
PostRepository:
C#
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
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using Common.App_Data;
using Common.Models;
 
namespace Common.Services.Repositories
{
    public class PostRepository : IRepository<Post>, IDisposable
    {
        private BlogContext db;
 
        public PostRepository( BlogContext context)
        {
            db = context;
        }
 
 
        public IEnumerable<Post> GetList()
        {
            return db.Posts.ToList();
        }
 
        public Post Get(int? id)
        {
            return db.Posts.Find( id );
        }
 
        public void Create( Post post ) // create object--Action : Posts/Create
        {
            post.PostedDateTime = DateTime.Now;
            db.Posts.Add( post );
        }
 
        public void Delete( Post post ) // delete object --Action : Posts/Delete 
        {
            if (post == null) return;
            db.Posts.Remove(post);
        }
 
        public void Edit( Post post ) // edit object--Action : Posts/Edit
        {
            post.ModifiedDateTime = DateTime.Now;
            db.Entry( post ).State = EntityState.Modified;
        }
       
       private bool disposed = false;
        public virtual void Dispose( bool disposing )
        {
            if (!disposed)
            {
                if (disposing)
                {
                    db.Dispose();
                }
                disposed = true;
            }
        }
        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize( this );
        }
 
       
    }
}
IRepository:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System.Collections.Generic;
 
namespace Common.Services.Repositories
{
    public interface IRepository<T> where T : class
    {
        IEnumerable<T> GetList();
        T Get(int? id); 
        void Create(T item); 
        void Edit(T item);
        void Delete( T item ); 
 
    }
}
UnitOfWork:

C#
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
using System;
using System.Data.Entity.Validation;
using System.Linq;
using Common.App_Data;
 
namespace Common.Services.Repositories
{
    public class UnitOfWork : IDisposable
    {
        private BlogContext db;
        private PostRepository postRepository;
 
        public PostRepository Post => postRepository ?? (postRepository = new PostRepository(db));
 
 
        public void Save()
        {
            try
            {
                db.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {
                var raise = dbEx.EntityValidationErrors.Aggregate<DbEntityValidationResult, Exception>(dbEx, (current1, validationErrors) => 
                validationErrors.ValidationErrors.Select(validationError =>
                $"{validationErrors.Entry.Entity.ToString()}:{validationError.ErrorMessage}").Aggregate(current1, (current, message) => 
                new InvalidOperationException(message, current)));
                throw raise;
            }
        }
 
        private bool disposed = false;
 
       public virtual void Dispose( bool disposing )
        {
            if (disposed) return;
            if (disposing)
            {
                db.Dispose();
            }
            disposed = true;
        }
 
        public void Dispose()
        {
            Dispose( true );
            GC.SuppressFinalize( this );
        }
    }
}
Ну и вот собственно в первом тесте я хочу протестить , что при выполнении метода GetList() возвращается список постов (Да вообще - или результат не нулевой), наверное тут надо использовать моки , но я начал с ними и бытро стал путаться, потом решил , что чем проще -тем лучше. Тест не проходит((

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using Common.Services.Repositories;
using Microsoft.VisualStudio.TestTools.UnitTesting;
 
namespace UnitTests.Test
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void GetListOfPostsReturnsNotNull()
        {
            //Arrange
            var unitOfWork = new UnitOfWork();
            //Act
            var testList = unitOfWork.Post.GetList();
            //Asset
            Assert.IsNotNull(testList);
        }
    }
}
Добавлено через 2 часа 57 минут
Гайз, ну вы же на опыте) Ну сам принцип правильный подскажите, пожалуйста.

Добавлено через 15 часов 3 минуты
Вот такой еще варик, но тоже не работает(:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
[TestMethod]
        public void GetListOfPostsReturnsNotNull()
        {
            //Arrange
            var mockDb = new Mock<BlogContext>();
            var mockRep = new Mock<PostRepository>();
            var unitOfWork = new UnitOfWork(mockDb.Object,mockRep.Object);
 
            //Act
            var testList = unitOfWork.Post.GetList();
            //Asset
            Assert.IsNotNull(testList);
        }
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2018, 09:57
Ответы с готовыми решениями:

Конструктор контроллера Unit of Work
Помогите, пожалуйста, понять, как мне связать сервисы с контроллером. Класс лежит в отдельной...

Unit Tests
У меня 2005 студия pro и на ней нету unit test'ов. можно где-то скачать инструмент. чтоб не ставить...

Unit tests
Добрый день. Кто-нибудь сталкивался с написанием unit тестов? Кто может посоветовать литературу или...

Android unit tests
Всем привет, хочу получить различные точки зрения по вопросу автоматизированного тестирования. А...

1
2 / 2 / 2
Регистрация: 21.10.2016
Сообщений: 68
25.05.2018, 09:28  [ТС] 2
Не смотря на бесконечный поток ответов, позвольте я все-таки покажу то , что я сделал. Тестировал только CRUD методы, контроллеры не тестил. Пока тесты только для Post, позже сделаю тесты для User и Comments.
Create:

C#
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
using Common.App_Data;
using Common.Models;
using Common.Services.Repositories;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;
 
namespace UnitTests.Test
{
    [TestClass]
    public class CreatePostTest
    {
        private BlogContext db;
        private PostRepository postRepository;
        private Mock<UnitOfWork> mockUOW;
        private Post post;
        private Post post1;
 
        [TestInitialize]
        public void Initialize()
        {
            db = new BlogContext();
            postRepository = new PostRepository( db );
            mockUOW = new Mock<UnitOfWork>( db, postRepository );
            post = new Post
            {
                Title = "Amazon",
                Description = "Amazon daily deals for Tuesday, April 17",
                Category = "Technology",
                Content =
                    "If you\'re looking to add a little extra security for your house, Amazon has plenty of deals on surveillance cameras so you can keep an eye on things.\r\nDIYers can also pick up a DeWALT drill and impact combo kit for their next project, and outdoor enthusiasts can save up to 25% on boating and fishing gear. \r\n\r\nThere are also lightning deals on summer wear like tank tops and water shoes, not to mention smartphone charging accessories like an Anker power bank and a Qi-enabled wireless charger.\r\n",
                Author = "blogger123@com.com",
            };
            post1 = new Post();
        }
 
        [TestMethod]
        public void CreatePostTestPostIdBiggerThenNull()
        {
            //Act
            mockUOW.Object.Post.Create(post);
            mockUOW.Object.Save();
 
            //Assert
            Assert.IsTrue(post.Id > 0);
        }
 
        [TestMethod]
        public void CreatePostTestReturnsGetPostByIdTest()
        {
            //Act
            mockUOW.Object.Post.Create( post );
            mockUOW.Object.Save();
            post1 = mockUOW.Object.Post.Get( post.Id );
 
            //Assert
            Assert.AreEqual( post1, post );
        }
 
    }
}
Retrieve (by Id):
C#
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
using Common.App_Data;
using Common.Models;
using Common.Services.Repositories;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;
 
namespace UnitTests.Test
{
    [TestClass]
    public class GetPostByIdTest
    {
        private BlogContext db;
        private PostRepository postRepository;
        private Mock<UnitOfWork> mockUOW;
        private Post post;
 
        [TestInitialize]
        public void Initialize()
        {
            db = new BlogContext();
            postRepository = new PostRepository( db );
            mockUOW = new Mock<UnitOfWork>( db, postRepository );
            post = new Post
            {
                Id = 100,
                Title = "Amazon",
                Description = "Amazon daily deals for Tuesday, April 17",
                Category = "Technology",
                Content =
                    "If you\'re looking to add a little extra security for your house, Amazon has plenty of deals on surveillance cameras so you can keep an eye on things.\r\nDIYers can also pick up a DeWALT drill and impact combo kit for their next project, and outdoor enthusiasts can save up to 25% on boating and fishing gear. \r\n\r\nThere are also lightning deals on summer wear like tank tops and water shoes, not to mention smartphone charging accessories like an Anker power bank and a Qi-enabled wireless charger.\r\n",
                Author = "blogger123@com.com",
            };
            mockUOW.Object.Post.Create( post );
            mockUOW.Object.Save();
        }
 
        [TestMethod]
        public void GetPostByIdReturnNotNull()
        {
            //Act
            Post testPost = mockUOW.Object.Post.Get(100);
            //Assert
            Assert.IsNotNull(testPost);
        }
 
        [TestMethod]
        public void GetPostByIdReturnPostType()
        {
            //Act
            Post testPost = mockUOW.Object.Post.Get( 100 );
            //Assert
            Assert.IsInstanceOfType(testPost, typeof(Post));
        }
    }
}
Retrieve (whole list):

C#
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
using System.Collections.Generic;
using Common.App_Data;
using Common.Models;
using Common.Services.Repositories;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;
 
namespace UnitTests.Test
{
    [TestClass]
    public class GetListOfPostsTest
    {
        private BlogContext db;
        private PostRepository postRepository;
        private Mock<UnitOfWork> mockUOW;
        private List<Post> posts;
 
        [TestInitialize]
        public void Initialize()
        {
            db = new BlogContext();
            postRepository = new PostRepository( db );
            mockUOW = new Mock<UnitOfWork>( db, postRepository );
            posts = new List<Post>()
            {
                new Post
                {
                    Id = 200,
                    Title = "Amazon",
                    Description = "Amazon daily deals for Tuesday, April 17",
                    Category = "Technology",
                    Content =
                        "If you\'re looking to add a little extra security for your house, Amazon has plenty of deals on surveillance cameras so you can keep an eye on things.\r\nDIYers can also pick up a DeWALT drill and impact combo kit for their next project, and outdoor enthusiasts can save up to 25% on boating and fishing gear. \r\n\r\nThere are also lightning deals on summer wear like tank tops and water shoes, not to mention smartphone charging accessories like an Anker power bank and a Qi-enabled wireless charger.\r\n",
                    Author = "blogger123@com.com",
                },
                new Post
                {
                    Id = 300,
                    Title = "Ford",
                    Description = "Ford charges into electric bike-sharing",
                    Category = "Technology",
                    Content =
                        "I got to try one out ahead of time, taking a test ride through San Francisco\'s crowded South of Market and hilly Potrero Hill neighborhoods. My prediction: The e-bike, a Ford GoBike Plus, will be in high demand. The motor provides a jolt of pep, and I was able to climb a fairly steep two blocks of Mississippi Street — something I never would have done on a regular bicycle.\r\n\r\nMotivate, the bike-share operator behind Citi Bike in New York City, rushed to bring the new e-bikes into the Bay Area after a spate of other e-bikes and scooters flooded the market. Like its pedal-powered cousin, the new bikes require a dock. These aren\'t a jump-on-and-drop-off anywhere option, but you don\'t have to worry about blocking the sidewalk or walkway, since the bike has a designated space. \r\n\r\nFord’s e-bikes follow the trend from Chinese bike companies that have crept into North American cities. In China, the electric bikes have been popular for the past few years, but the easy-to-ride bicycles come with major issues, like sidewalk litter, rampant theft, and mass bicycle graves filled with broken and abandoned bikes. \r\n\r\nAlso in the mix is Uber\'s recently acquired Jump e-bikes, a San-Francisco-based share program. Those don\'t require a dock, but they feel less zippy compared to the Ford bikes. The built-in U-locks on the red Jump bikes do make it easier to use a bike rack wherever you go. A Motivate spokesperson said Ford is researching a dockless version of its bicycles.",
                    Author = "blogger123@com.com",
                }
            };
            foreach (var testPost in posts)
            {
                mockUOW.Object.Post.Create( testPost );
            }
            mockUOW.Object.Save();
        }
 
        [TestMethod]
        public void GetListOfPostsReturnNotNull()
        {
            //Act
            var testPostsList = mockUOW.Object.Post.GetList();
            //Assert
            Assert.IsNotNull( testPostsList );
        }
 
        [TestMethod]
        public void GetListOfPostsReturnListOfPostType()
        {
            //Act
            var testPostsList = mockUOW.Object.Post.GetList();
            //Assert
            Assert.IsInstanceOfType( testPostsList, typeof( List<Post> ) );
        }
    }
}
Update:

C#
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
using Common.App_Data;
using Common.Models;
using Common.Services.Repositories;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;
 
namespace UnitTests.Test
{
    [TestClass]
    public class EditPostTest
    {
        private BlogContext db;
        private PostRepository postRepository;
        private Mock<UnitOfWork> mockUOW;
        private Post post;
        private Post post1;
        private string titleForChange;
        private int idForTest;
 
        [TestInitialize]
        public void Initialize()
        {
            db = new BlogContext();
            postRepository = new PostRepository( db );
            mockUOW = new Mock<UnitOfWork>( db, postRepository );
            post = new Post
            {
                Title = "Amazon",
                Description = "Amazon daily deals for Tuesday, April 17",
                Category = "Technology",
                Content =
                    "If you\'re looking to add a little extra security for your house, Amazon has plenty of deals on surveillance cameras so you can keep an eye on things.\r\nDIYers can also pick up a DeWALT drill and impact combo kit for their next project, and outdoor enthusiasts can save up to 25% on boating and fishing gear. \r\n\r\nThere are also lightning deals on summer wear like tank tops and water shoes, not to mention smartphone charging accessories like an Anker power bank and a Qi-enabled wireless charger.\r\n",
                Author = "blogger123@com.com",
            };
            post1 = new Post();
            titleForChange = "New Title for Testing post";
            idForTest = 12;
        }
 
        [TestMethod]
        public void EditPostTestReturnPostWithSameId()
        {
            //Act
            mockUOW.Object.Post.Create( post );
            mockUOW.Object.Save();
            post = mockUOW.Object.Post.Get( idForTest );
            post.Title = titleForChange;
            mockUOW.Object.Post.Edit( post );
            post1 = mockUOW.Object.Post.Get( idForTest );
 
            //Assert
            Assert.IsNotNull( post );
            Assert.AreEqual( post.Id, idForTest );
        }
        [TestMethod]
        public void EditPostTestReturnPostWithAnotherTitle()
        {
            //Act
            mockUOW.Object.Post.Create( post );
            mockUOW.Object.Save();
            post = mockUOW.Object.Post.Get( idForTest );
            post.Title = titleForChange;
            mockUOW.Object.Post.Edit(post);
            post1 = mockUOW.Object.Post.Get( idForTest );
 
            //Assert
            Assert.IsNotNull(post);
            Assert.AreEqual(post1.Title,titleForChange);
        }
 
       
 
    }
}
Delete:
C#
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
using Common.App_Data;
using Common.Models;
using Common.Services.Repositories;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;
 
namespace UnitTests.Test
{
    [TestClass]
    public class DeletePostTest
    {
        private BlogContext db;
        private PostRepository postRepository;
        private Mock<UnitOfWork> mockUOW;
        private Post post;
        private Post post1;
        private int idForTest;
 
        [TestInitialize]
        public void Initialize()
        {
            db = new BlogContext();
            postRepository = new PostRepository( db );
            mockUOW = new Mock<UnitOfWork>( db, postRepository );
            post = new Post
            {
                Title = "Amazon",
                Description = "Amazon daily deals for Tuesday, April 17",
                Category = "Technology",
                Content =
                    "If you\'re looking to add a little extra security for your house, Amazon has plenty of deals on surveillance cameras so you can keep an eye on things.\r\nDIYers can also pick up a DeWALT drill and impact combo kit for their next project, and outdoor enthusiasts can save up to 25% on boating and fishing gear. \r\n\r\nThere are also lightning deals on summer wear like tank tops and water shoes, not to mention smartphone charging accessories like an Anker power bank and a Qi-enabled wireless charger.\r\n",
                Author = "blogger123@com.com",
            };
            idForTest = 9;
            post1 = new Post();
        }
 
        [TestMethod]
        public void DeletePostTestReturnNull()
        {
            //Act
            mockUOW.Object.Post.Create( post );
            mockUOW.Object.Save();
            post = mockUOW.Object.Post.Get( idForTest );
            mockUOW.Object.Post.Delete( post );
            mockUOW.Object.Save();
            post1 = mockUOW.Object.Post.Get( idForTest );
 
            //Assert
            Assert.IsNull( post1 );
        }
        
    }
}
Ожидаю конструктивной критики)
Миниатюры
Unit Tests для проекта с Unit Of Work  
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.05.2018, 09:28

Python unit tests в maven
Есть Maven-проект, в котором есть некоторые питоновские скрипты. Для тестирования этих скриптов...

Ошибка в Unit Tests (CppUnitTestFramework)
Пытаюсь написать 3 юнит теста. При билде получаю ошибку fatal error LNK1120: 1 unresolved...

Модульные тесты *unit tests
Какие полезные модульные тесты (unit tests) можно написать можно написать для загрузки данных из...

Maven packaging war before unit tests
Собственно сабж. Использую maven-surefire-plugin для запуска юнит тестов, maven-war-plugin для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.