Ò»¡¢ÎªÊ²Ã´Òª½øÐе¥Ôª²âÊÔ£¿
´ó²¿·Ö¿ª·¢Õß¶¼Óиöϰ¹ß£¨°üÀ¨±¾ÈËÔÚÄÚ£©£¬³£³£²»Ï²»¶È¥×öµ¥Ôª²âÊÔ¡£ÒòΪÎÒÃǶÔ×Ô¼ºÐ´µÄ³ÌÐò×ÜÊÇäĿ×ÔÐÅ£¬»òÕß´æÔÚ½ÄÐÒÐÄÀíÿ´ÎÔËÐÐͨ¹ýºó¾ÍÖ±½ÓÈÓ¸ø²âÊÔ×éµÄÃÃ×ÓÃÇÁË¡£½á¹ûÃÃ×ÓÒ»²â£¬´ó°Ñ´ó°ÑµÄbug³öÏÖÁË£¬×îºóÿÿ¿´µ½²âÊÔµÄÃÃ×Ó×ß¹ýÀ´£¬ÐÄÀï¾ÍÖ»Ïë˵һ¾ä»°£ºÄãÊǺï×ÓÇëÀ´µÄ¶º±ÈÂ𣿱¾À´Ïë½Úʡʱ¼ä£¬½á¹û×îºó»¨ÔÚÕÒBUGºÍÐÞ¸´BUGµÄÕâЩʱ¼ä¼ÓÆðÀ´ÒѾ±È¿ª·¢Õâ¸öÄ£¿éËù»¨µÄʱ¼ä»¹Òª¶àÁË£¬×îºó¸üÒªÃüµÄÊÇ£¬¿ÓµùµÄ¼Ó°à¾ÍÔÚËùÄÑÃâÁË£¡Èç¹ûÒ»¿ªÊ¼½«bug¶ôÖÆÔÚÃÈѿ״̬£¬ÎÒÃÇÖÁÓÚÕâô¿à±ÆÂð£¿SO£¬µ¥Ôª²âÊÔºÜÓбØÒª£¡
¶þ¡¢µ¥Ôª²âÊÔ·¨Ôò
1¡¢µ¥Ôª²âÊÔ±ØÐëÄܹ»Öظ´Ö´ÐУ¬¾ÍÊÇÄܹ»·Ç³£Æµ·±µØÖ´ÐÐ
2¡¢µ¥Ôª²âÊÔµÄÖ´ÐÐËٶȲ»ÄÜÌ«Âý£¬Òª²»È»»áÓ°Ï쿪·¢½ø¶ÈµÄ
3¡¢µ¥Ôª²âÊÔ²»Ó¦¸ÃÒÀÀµÓÚÍⲿ×ÊÔ´ºÍÕæÊµµÄ»·¾³
4¡¢µ¥Ôª²âÊÔ²»Ó¦¸ÃÉæ¼°µ½ÕæÊµÊý¾Ý¿âµÄ²Ù×÷
5¡¢ÒªÈ·±£µ¥Ôª²âÊԵĿÉÐŶÈ
6¡¢µ¥Ôª²âÊÔͨ³£ÒÔ²âÊÔÒ»¸ö·½·¨Îªµ¥Î»
7¡¢Ã¿Ò»¸ö³ÌÐòÔ³¶¼ÐèҪΪ×Ô¼ºÐ´µÄ´úÂë±àдµ¥Ôª²âÊÔ´úÂë
Èý¡¢µ¥Ôª²âÊÔ¹¤¾ß
ÎÒÔÚÕâÀï½ö½öÍÆ¼öÒ»¸ö±È½ÏʵÓõIJâÊÔ¹¤¾ßNUnit£¬¿Éµ¥¶ÀʹÓã¬Ò²¿ÉÒÔͨ¹ýTestDriven.NET£¨TestDriven.NETÊÇÒÔ²å¼þÐÎʽ¼¯³ÉÔÚVisual
Studio IDEÖеĵ¥Ôª²âÊÔ¹¤¾ß£¬ÍêÈ«¼æÈÝËùÓÐ.NET Framework°æ±¾£¬²¢ÇÒ¼¯³ÉÁ˶àÖÖµ¥Ôª²âÊÔ¿ò¼ÜÖîÈçNUnit£¬MbUnit£¬ÒÔ¼°
MS Team System µÈ£©½«Æä¼ÓÈëµ½vsÖС£
NUnit×÷ΪxUnit¼Ò×åÖеÄ.Net³ÉÔ±£¬ÊÇ.NETµÄµ¥Ôª²âÊÔ¿ò¼Ü£¬xUnitÊÇÒ»Ì×ÊʺÏÓÚ¶àÖÖÓïÑԵĵ¥Ôª²âÊÔ¹¤¾ß¡£Ëü¾ßÓÐÈçÏÂÌØÕ÷£º
ÌṩÁËAPI£¬Ê¹µÃÎÒÃÇ¿ÉÒÔ´´½¨Ò»¸ö´øÓС°Í¨¹ý/ʧ°Ü¡±½á¹ûµÄÖØ¸´µ¥Ôª¡£
°üÀ¨ÁËÔËÐвâÊԺͱíʾ½á¹ûËùÐèµÄ¹¤¾ß¡£
ÔÊÐí¶à¸ö²âÊÔ×÷Ϊһ¸ö×éÔÚÒ»¸öÅú´¦ÀíÖÐÔËÐС£
·Ç³£ÁéÇÉ£¬²Ù×÷¼òµ¥£¬ÎÒÃÇ»¨·ÑºÜÉÙµÄʱ¼ä¼´¿Éѧ»á²¢ÇÒ²»»á¸ø²âÊԵijÌÐòÌí¼Ó¶îÍâµÄ¸ºµ£¡£
¹¦ÄÜ¿ÉÒÔÀ©Õ¹£¬Èç¹ûÏ£Íû¸ü¶àµÄ¹¦ÄÜ£¬¿ÉÒÔºÜÈÝÒ×µÄÀ©Õ¹Ëü¡£
Ì×ÓÃÀÏÂ޵ϰ¾ÍÊÇÒ»¾ä»°£ºËüÊǵ±½ñ.NETÁìÓò×îÅ£±ÆµÄ²âÊÔ¹¤¾ßÖ®Ò»
ÔÚ.NETϵĵ¥Ôª²âÊÔ¹¤¾ßÆäʵ·Ç³£¶à£¬ÕâÀï²»Ïë¶à˵£¬ÎÒÃǾÍʹÓÃ΢Èí×Ô¼ºÌṩµÄ²âÊÔ¿ò¼ÜUnit
Test Framework£¬ÒѾ¼¯³ÉÔÚvsÖÐÁË~
ËÄ¡¢MOQ
µ¥Ôª²âÊÔµÄÄ¿±êÊÇÒ»´ÎÖ»²âÊÔÒ»¸ö·½·¨£¬ÊÇÒ»ÖÖϸÁ£¶ÈµÄ²âÊÔ£¬µ«ÊǼÙÈçij¸ö·½·¨ÒÀÀµÓÚÆäËûһЩÄÑÒԲٿصÄÍⲿ¶«¶«£¬±ÈÈçËµÍøÂçÁ¬½Ó¡¢Êý¾Ý¿âÁ¬½ÓµÈʱ£¬ÄÇôÎÒÃǸÃÔõô°ìÄØ£¿¼ÈÈ»µ¥Ôª²âÊԵķ¨Ôò˵²»ÈÃÒÀÀµÕâЩ¸öÍâ²¿ÕæÊµµÄ¶«Î÷£¬ÄÇ»¹²»¼òµ¥£¬ÎÒɽկһ¸ö²»¾ÍÐÐÁËÂ𣿴Ëʱµ±²ÉÓÃÒÔ¼ÙÂÒÕæµÄÊÖ·¨À´Íê³Éµ¥Ôª²âÊÔ¡£Êµ¼ÊÉÏÎÒÃÇÕâÀï²ÉÓõÄÊÇMock¶ÔÏó£¬Ò²¾ÍÊÇÕæÊµ¶ÔÏóµÄÌæ´úÆ·£¬²¢Ê¹ÓÃMoq¿ò¼ÜÀ´Ä£ÄâMock¶ÔÏó£¬ËüΪÎÒÃÇÌṩÁËÄ£ÄâÕæÊµ¶ÔÏóÐÐΪµÄÄÜÁ¦£¬È»ºó½»¸ø±»²âÊÔ¹¦ÄÜʹÓã¬ÒÔ´ËÅжϱ»²âÊÔ¹¦ÄÜÊÇ·ñÕýÈ·¡£
×¢Ò⣺MoqÖ»ÄÜÄ£Äâ½Ó¿Ú»ò³éÏóÀà¡£
Äã¿ÉÒÔͨ¹ýNugetÀ´»ñÈ¡Moq²¢ÇÒÒýÓõ½Ö¸¶¨µÄÏîÄ¿£¬Ò²¿ÉÒÔÔÚgoogleÉÏÏÂÔØ£¬²»¹ÜÔõÑù¼ÇµÃÔÚ²âÊÔÏîÄ¿ÖÐÒýÓÃMoq.dll¾ÍÐÐ~
¾Ù¸öÀõ×Ó£º
public class Student { public string ID { get; set; } public string Name { get; set; } public int Age { get; set; } } IStudentRepository public interface IStudentRepository { Student GetStudentById(string id); } |
ÏÂÃæÊÇ·½·¨GetStudentByIdµÄµ¥Ôª²âÊÔ´úÂ룺
[TestMethod] public void GetStudentByIdTest() { //´´½¨MOCK¶ÔÏó var mock = new Mock<IStudentRepository>(); //ÉèÖÃMOCKµ÷ÓÃÐÐΪ mock.Setup(p=>p.GetStudentById("1")).Returns(new Student()); //MOCKµ÷Ó÷½·¨ mock.Object.GetStudentById("1"); Assert.AreNotSame(new Student(), mock.Object.GetStudentById("1")); } |
ÕâÀïÆäʵÒѾÒÔ¼ÙÂÒÕæÁË£¬ÒòÎªÕæÊµµÄ½Ó¿ÚIStudentRepositoryÀï±ßµÄ·½·¨GetStudentByIdÔÚʵ¼ÊÖп϶¨ÒªÒª·ÃÎÊÊý¾Ý¿âµÄ£¬ÄÇôÎÒÃÇÕâÀïѹ¸ù¶¼Ã´ÓзÃÎÊʲôÊý¾Ý¿â£¬Ö±½ÓÓÃIStudentRepository½Ó¿ÚÄ£ÄâÁËÒ»¸ö¶ÔÏ󣬸ù±¾²»ÓÃʵÏÖ£¬ÕâÑù˲¼ä¾ÍÌá¸ßÁ˵¥Ôª²âÊԵĿÉÐÐÐÔ¡£²»¹ýÕâÀïÒ²ÒªÌá¸öÐÑ£¬¾ÍÊÇÔÚд´úÂëµÄʱºò£¬±ðÈôúÂë²úÉú¹ý¶ÈµÄÒÀÀµ£¬·½¿ÉÔÚ½øÐе¥Ôª²âÊÔʱ˳Àû½øÐУ¡
˵˵³£ÓõÄMoq³ÉÔ±£º
1¡¢Mock<T>£ºÍ¨¹ýÕâ¸öÀàÎÒÃÇÄܹ»µÃµ½Ò»¸öMock<T>¶ÔÏó£¬T¿ÉÒÔÊǽӿںÍÀà¡£ËüÓÐÒ»¸ö¹«¿ªµÄObjectÊôÐÔ£¬Õâ¸ö¾ÍÊÇÎÒÃÇMoqΪÎÒÃÇÄ£Äâ³öµÄ¶ÔÏó¡£
var mo = new Mock<IStudentRepository>(); ¡¡¡¡mo.Object //Æäʵ¾ÍÊÇÄ£ÄâʵÏÖIStudentRepository½Ó¿ÚµÄ¶ÔÏó |
2¡¢It£ºÕâÊÇÒ»¸ö¾²Ì¬À࣬ÓÃÓÚ¹ýÂ˲ÎÊý¡£
ItºÜÊʺÏÓÃÀ´Æ¥ÅäÊý×Ö£¬×Ö·û´®²ÎÊý£¬ËüÌṩÁËÈçϼ¸¸ö¾²Ì¬·½·¨£º
Is<TValue> £º²ÎÊýΪExpression<Predict<TValue>>ÀàÐÍ£¬µ±ÄãÐèҪijÖÖÀàÐͲ¢ÇÒÕâÖÖÀàÐÍҪͨ¹ý´úÂëÀ´Åжϵϰ¿ÉÒÔʹÓÃËü¡£
IsAny<TValue> £ºÃ»ÓвÎÊý£¬Ö»ÒªÊÇTValueÀàÐ͵ľÍÄÜÆ¥Åä³É¹¦¡£
IsInRange<TValue> £ºÓÃÀ´Æ¥ÅäÁ½¸öµÄTValueÀàÐÍÖµÖ®¼äµÄ²ÎÊý¡££¨Range²ÎÊý¿ÉÒÔÉ趨¿ª±ÕÇø¼ä£©
IsRegex£ºÓÃÕýÔò±í´ïʽƥÅä¡££¨½öÏÞÓÚ×Ö·û´®ÀàÐͲÎÊý£©
var customer = new Mock<ICustomer>(); |
customer.Setup(x => x.SelfMatch(It.Is<int>(i
=> i % 2 == 0))).Returns("1");//·½·¨SelfMatch½ÓÊÜintÐͲÎÊý£¬µ±²ÎÊýΪżÊýʱ£¬²Å·µ»Ø×Ö·û´®1¡£
customer.Setup(p => p.SelfMatch(It.IsAny<int>())).Returns((int
k) => "ÈκÎÊý£º" + k);//·½·¨SelfMatch½ÓÊÜintÐÍ£¬ÇÒÈκÎintÐͲÎÊý¶¼¿ÉÒÔ£¬È»ºó·µ»Ø£º"ÈκÎÊý£º"
+ k¡£
customer.Setup(p => p.SelfMatch(It.IsInRange<int>(0,
10, Range.Inclusive))).Returns("10ÒÔÄÚµÄÊý");//·½·¨SelfMatch½ÓÊÜintÐÍ£¬ÇÒµ±·¶Î§ÔÚ[0,10]ʱ£¬²Å·µ»Ø10ÒÔÄÚµÄÊý
customer.Setup(p => p.ShowException(It.IsRegex(@"^\d+$"))).Throws(new
Exception("²»ÄÜÊÇÊý×Ö"));//ÓÃÕýÔò±í´ïʽ¹ýÂ˲ÎÊý²»ÄÜÊÇÊý×Ö
3¡¢MockBehavior£ºÓÃÓÚÅäÖÃMockObjectµÄÐÐΪ£¬±ÈÈçÊÇ·ñ×Ô¶¯mock¡£
MoqÓиöö¾ÙÀàÐÍMockBehavior£¬ÓÐÈý¸öÖµStrict£¬Loose£¬Default¡£
Strict±íʾMock¶ÔÏóÔÚµ÷ÓÃÒ»¸ö·½·¨Ç°Õâ¸ö·½·¨±ØÐë±»Mockµô£¬·ñÔò¾Í»áÒý·¢MockException¡£¶øLooseÓëÖ®Ïà·´£¬Èç¹ûµ÷ÓÃûÓÐMockµÄ·½·¨Ò²²»»á³ö´í¡£DefaultĬÈÏΪLoose¡£ÀýÈ磺
[TestMethod] public void MoqTest() { var mo = new Mock<ICustomer>(MockBehavior.Strict); mo.Object.Method();//ÔÚMockBehavior.StrictÉèÖÃÏ£¬Ò»Çе÷ÓÃδÌî³äµÄ·½·¨/ÊôÐÔ/ʼþʱ»áÅ׳öÒì³£ } |
4¡¢MockFactory£ºMock¶ÔÏ󹤳§£¬Äܹ»ÅúÁ¿Éú²úͳһ×Ô¶¨ÒåÅäÖõÄMock¶ÔÏó£¬Ò²ÄÜÅúÁ¿µÄ½øÐÐMock¶ÔÏó²âÊÔ¡£
ÕâÊÇÒ»¸öÄ£Äâ¶ÔÏóµÄ¹¤³§£¬ÎÒÃDz»¿ÉÒÔ³ÉÅúMockËüÃÇ£¬ÀýÈ磺
var factory = new MockFactory(MockBehavior.Strict) { DefaultValue = DefaultValue.Mock }; // Create a mock using the factory settings var aMock = factory.Create<IStudent>(); // Create a mock overriding the factory settings var bMock = factory.Create<ITeacher>(MockBehavior.Loose); // Verify all verifiable expectations on all mocks created through the factory factory.Verify(); |
5¡¢Match<T>£ºÈç¹ûÄãÏȾõµÃIt²»¹»ÓþÍÓÃMatch<T>£¬Í¨¹ýËüÄܹ»ÍêÈ«×Ô¶¨Ò广Ôò¡£
»¹ÊǾٸöÀõ×ӱȽÏÄÜ˵Ã÷ÎÊÌâ
[TestMethod()] public void MoqTest() { var mo = new Mock<IRepository>(); mo.Setup(p => p.Method(MatchHelper.ParamMatcher("wang"))).Returns("success"); Assert.AreEqual(mo.Object.("wang"), ¡°success); } //´Ë´¦¾ÍʵÏÖÁË×Ô¶¨ÒåµÄ²ÎÊýÆ¥Åä public static class MatchHelper { public static string ParamMatcher(string name) { return Match<string>.Create( p => p.Equals(name)); } } |
6¡¢VerifyºÍVerifyAll
ÓÃÓÚ²âÊÔmock¶ÔÏóµÄ·½·¨»òÊôÐÔÊÇ·ñ±»µ÷ÓÃÖ´ÐУ¬Verify±ØÐëÒªÏȵ÷ÓÃVerifiable()·½·¨²ÅÄÜÓ㬶øVerifyAll²»ÓÃÕâÑù¾Í¿ÉÒÔ¶ÔËùÓеÄmock¶ÔÏó½øÐÐÑéÖ¤£¬ÀýÈ磺
public void TestVerify() { var customer = new Mock<ICustomer>(); customer.Setup(p => p.GetCall(It.IsAny<string>())) .Returns("·½·¨µ÷ÓÃ").Verifiable();//±ØÐëµ÷ÓÃVerifiable()·½·¨²Å¿ÉÒÔ customer.Object.GetCall("µ÷ÓÃÁË£¡"); customer.Verify(); } public void TestVerifyAll() { var customer = new Mock<ICustomer>(); customer.Setup(p => p.GetCall(It.IsAny<string>())) .Returns("·½·¨µ÷ÓÃ"); //ûÓÐÏÔʽµ÷ÓÃVerifiable()·½·¨Ò²¿ÉÒÔ customer.Object.GetCall("µ÷ÓÃÁË£¡"); customer.VerifyAll(); } |
7¡¢Callback
Æäʵ¾ÍÊǻص÷£¬Ê¹ÓÃCallback¿ÉÒÔʹÎÒÃÇÔÚij¸öʹÓÃÌØ¶¨²ÎÊýÆ¥ÅäµÄ·½·¨ÔÚ±»µ÷ÓÃʱµÃµ½Í¨Öª¡£µ±Ö´ÐÐij·½·¨Ê±£¬µ÷ÓÃÆäÄÚ²¿ÊäÈëµÄ£¨Action£©Î¯ÍУ¬ÀýÈ磺
public void TestCallback() { var customer = new Mock<ICustomer>(); customer.Setup(p => p.GetCall(It.IsAny<string>())) .Returns("·½·¨µ÷ÓÃ") .Callback((string s)=>Console.WriteLine("ok"+s)); customer.Object.GetCall("x"); } |
Îå¡¢ASP.NET MVCµ¥Ôª²âÊÔÓ¦ÓÃ
¼¸µã½¨Ò飺
1¡¢Ã¿µ±ÄãÏòcontroller¡¢service¡¢repository²ãÖÐÌí¼ÓһϵÁеÄк¯Êýʱ£¬´ÓÄ㿪ʼÐ޸ĴúÂëµÄÄÇÒ»¿Ì¿ªÊ¼£¬Äã¾Í±ØÐëµÃ³Ðµ£ÓпÉÄÜÆÆ»µÔ±¾Õý³£¹¤×÷µÄÄDz¿·Ö¹¦ÄܵķçÏÕ¡£ÑÔÍâÖ®Ò⣬Äã±ØÐë½øÐе¥Ôª²âÊÔ²ÅÐС£
2¡¢µ¥Ôª²âÊÔ±ØÐëÊÇ¿ÉÒÔ¿ìËÙÖ´Ðеġ£Òò´Ë¶ÔÓÚºÄʱµÄÊý¾Ý¿â½»»¥À´Ëµ£¬Äã±ØÐë¶ÔÆä½øÐÐmock£¬È»ºó±àд´úÂëÓëmockµÄÊý¾Ý¿â½øÐн»»¥
3¡¢Äã²»±ØÎªview½øÐе¥Ôª²âÊÔ¡£ÒòΪҪÏë¶Ôview½øÐвâÊÔ£¬Äã¾Í²»µÃ²»´î½¨web·þÎñÆ÷¡£ÒòΪ´î½¨web·þÎñÆ÷Ïà¶ÔÀ´ËµºÜºÄʱ£¬Òò´Ë²¢²»ÍƼöÕë¶Ôview½øÐе¥Ôª²âÊÔ¡£
Èç¹ûÄãµÄview°üº¬´óÁ¿¸´ÔÓµÄÂß¼£¬ÔòÄãÓ¦µ±¿¼Âǽ«ÕâЩÂß¼×ªÒÆµ½Helper·½·¨ÖС£Äã¿ÉÒÔÕë¶ÔHelper·½·¨±àдµ¥Ôª²âÊÔÇÒÎÞÐè´î½¨web·þÎñÆ÷¡£
4¡¢¶ÔÓÚÉæ¼°µ½httpµÄ¶«¶«£¬ÄãÒ²±ØÐëmockÒ»ÏÂ
ÈçºÎΪ·½·¨Ìí¼Óµ¥Ôª²âÊÔ£¿
1¡¢ÔÚн¨MVCÏîĿʱΪÏîÄ¿Ìí¼ÓĬÈϵĵ¥Ôª²âÊÔÏîÄ¿£¬ÈçͼËùʾ£º

2¡¢»òÕßÔÚvsÖÐÏàÓ¦µÄ·½·¨´¦µ¥»÷Êó±êÓÒ¼ü£¬Ìí¼Óµ¥Ôª²âÊÔ¼´¿É£¬ÈçͼËùʾ£º

MVCµ¥Ôª²âÊÔ
ĬÈÏÉú³ÉµÄµ¥Ôª²âÊÔ´úÂëÒѾΪControllerÉú³ÉÁËÏàÓ¦µÄµ¥Ôª²âÊÔ·½·¨£¬ÀýÈç¶ÔHomeController½øÐе¥Ôª²âÊÔ£¬×¢Òâ²âÊÔÀàµÄÃüÃû¹æ·¶£¬ÒÔ¼°Á½¸öÌØÐÔTestClassºÍTestMethod£¬ÓÐÁËÕâÁ½¸ö¶«¶«£¬·½¿É¶ÔÀàºÍ·½·¨½øÐвâÊÔ¡£ÎÒÃÇ¿ÉÒÔ·¢ÏÖÊǰ´ÕÕarrange/act/assertµÄģʽÀ´½øÐе¥Ôª²âÊԵ쬵¥Ôª²âÊÔ˵°×Á˾ÍÊÇÈý²½×ߣºarrange£º³õʼ»¯²âÊԵĻ·¾³ÊôÓÚ×¼±¸½×¶Î£»act£ºÖ´ÐвâÊÔ£»assert£º¶ÏÑÔ£¬²âÊԵĽá¹û
[TestClass] public class HomeControllerTest { [TestMethod] public void About() { // Arrange HomeController controller = new HomeController(); // Act ViewResult result = controller.About() as ViewResult; // Assert Assert.IsNotNull(result); } } |
ÄѵãÆäʵÔÚµÚÒ»²½£¬¾ÍÊDzâÊÔ»·¾³µÄ×¼±¸£¬ÕâÀï¸ü¶àµÄÊÇÓÃMoqÀ´½øÐÐÄ£Äâ¡£ÁíÍâ£¬Éæ¼°µ½µÄAssertÀàÖ÷ÒªÓÐÒÔÏÂÕâЩ·½·¨
Assert.Inconclusive() ±íʾһ¸öδÑéÖ¤µÄ²âÊÔ£»
Assert.AreEqual() ²âÊÔÖ¸¶¨µÄÖµÊÇ·ñÏàµÈ£¬Èç¹ûÏàµÈ£¬Ôò²âÊÔͨ¹ý£»
AreSame() ÓÃÓÚÑéÖ¤Ö¸¶¨µÄÁ½¸ö¶ÔÏó±äÁ¿ÊÇÖ¸ÏòÏàͬµÄ¶ÔÏ󣬷ñÔòÈÏΪÊÇ´íÎó
AreNotSame() ÓÃÓÚÑéÖ¤Ö¸¶¨µÄÁ½¸ö¶ÔÏó±äÁ¿ÊÇÖ¸Ïò²»Í¬µÄ¶ÔÏ󣬷ñÔòÈÏΪÊÇ´íÎó
Assert.IsTrue() ²âÊÔÖ¸¶¨µÄÌõ¼þÊÇ·ñΪTrue£¬Èç¹ûΪTrue£¬Ôò²âÊÔͨ¹ý£»
Assert.IsFalse() ²âÊÔÖ¸¶¨µÄÌõ¼þÊÇ·ñΪFalse£¬Èç¹ûΪFalse£¬Ôò²âÊÔͨ¹ý£»
Assert.IsNull() ²âÊÔÖ¸¶¨µÄ¶ÔÏóÊÇ·ñΪ¿ÕÒýÓã¬Èç¹ûΪ¿Õ£¬Ôò²âÊÔͨ¹ý£»
Assert.IsNotNull() ²âÊÔÖ¸¶¨µÄ¶ÔÏóÊÇ·ñΪ·Ç¿Õ£¬Èç¹û²»Îª¿Õ£¬Ôò²âÊÔͨ¹ý£»
Ò»¸öÄ£Äâ·ÃÎÊService·þÎñµÄµ¥Ôª²âÊÔÀõ×Ó£º
namespace Mvc4UnitTesting.Tests.Controllers { [TestClass] public class HomeControllerTest { [TestMethod] public void Index() { // Arrange var mockIProductService = new Mock<IProductService>(); mockIProductService.Setup(p => p.GetAllProduct()).Returns(new List<Product>
{ new Product{ ProductId = 1, ProductName = "APPLE", Price = "5999"}}); HomeController controller = new HomeController(mockIProductService.Object); // Act ViewResult result = controller.Index() as ViewResult; var product = (List<Product>)result.ViewData.Model; // Assert Assert.AreEqual("APPLE", product.First<Product>().ProductName); } } } |
Ò»¸öÄ£Äâ·ÃÎÊWeb»·¾³µÄµ¥Ôª²âÊÔÀõ×Ó£º
public ActionResult Index() { ViewData["Message"] = Request.QueryString["WW"]; return View(); } [TestMethod] public void Index() { HomeController controller = new HomeController(); var httpContext = new Mock<HttpContextBase>(); var request=new Mock<HttpRequestBase>(); NameValueCollection queryString = new NameValueCollection(); queryString.Add("WW", "WW"); request.Setup(r => r.QueryString).Returns(queryString); httpContext.Setup(ht => ht.Request).Returns(request.Object); ControllerContext controllerContext = new ControllerContext(); controllerContext.HttpContext = httpContext.Object; controller.ControllerContext = controllerContext; ViewResult result = controller.Index() as ViewResult; ViewDataDictionary viewData = result.ViewData; Assert.AreEqual("WW", viewData["Message"]); } |
×ܽ᣺
ÓÐЧµÄ²âÊÔÊÇÈí¼þÖÊÁ¿µÄ±£Ö¤£¬ËùÒÔÕâÀïÏ£Íû´ó¼Ò£¬°üÀ¨±¾ÈË×Ô¼ºÔÚÄÚ£¬¶¼Äܹ»°Ñµ¥Ôª²âÊÔÂ䵽ʵ´¦£¬Ä¿Ç°¶ÔÓÚÎÒÃÇÀ´Ëµ£¬×î´óµÄÄѵãÔÚÓÚÄÜ·ñÇ¡µ½ºÃ´¦µØÄ£Äâ³öÏà¹ØµÄÒÀÀµ×ÊÔ´£¬Òò´Ëд³öµÍñîºÏµÄ´úÂë¾Í±äµÃºÜÓбØÒª¡£Æäʵ¶à¼ÓÁ·Ï°Ê¹ÓÃÖ®ºó£¬×ÔÈ»¾ÍÄܹ»Ó¦¶ÔÏà¶Ô¸´Ôӵĵ¥Ôª²âÊÔ£¬ÖÕÓÐÒ»ÌìÄã»á·¢ÏÖ£¬µ¥Î»²âÊÔÖ»²»¹ýÊÇ·Ö·ÖÖÓµÄÊ£¡
|