友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

VB2008从入门到精通(PDF格式英文版)-第31章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






               The source code contains four tests。 Each calls the method TranslateHello() with some  

          input and receives the output。 The test happens when the output is verified against an expected  

          result。 The verification tests use the pareTo() function to test for correct translation。  

               Notice the third test: 



                  If (Translator。TranslateHello(〃allosss〃)。pareTo(〃〃)  0) Then 

                      Console。WriteLine(〃Verify nontranslated word test failed〃) 

                  End If 



               This test expects an explicit failure。 You need to write tests that expect to fail。 Successful  

          tests that are meant to fail ensure that your code does not generate false positives。 A false positive  is  

          when your code is supposed to fail and it does not。 

               The tests are within a method that needs to be called from the Main() method; as in the  

          following example: 



              Sub Main() 

                  TestTranslateHello() 

                  Console。ReadKey() 

              End Sub 



               If you pile and run the tests; you will find that one of the tests fails。 The failing test is  

          the fourth one; which attempts to translate a word that has whitespace。 Whitespace is space  

          that we humans don’t notice; but is necessary to distinguish words; sentences; and so on。 Before  


…………………………………………………………Page 77……………………………………………………………

                                              CH AP T E R   3   ■    L E AR N IN G   AB O U T   ST R I N G   M A N I PU L A TI O N S  55 



we can solve the whitespace problem; we need to determine which part of the application is  

not working properly。  



Answering the Question of Responsibility 



The whitespace problem is an interesting one。 The caller explicitly put in the extra spaces; but  

is the whitespace a bug; or is it data that is passed in incorrectly? 

      The problem can be defined in the context of reasonable usage。 Imagine that you’ve just  

bought a car and you’re driving it on the highway。 If the car breaks down; the warranty will be  

in effect and cover the costs of the car repair。 Now imagine the situation where you think you  

are one of the Dukes from the Dukes of Hazzard。 And being a Duke; you drive your new car as  

fast as you can and then perform a flying jump。 The car will jump into air; which looks quite  

spectacular; but then the car lands。 After that; the shocks collapse; and the car cannot be driven  

any further。 Even though the car is brand new; the Duke did not use the car as envisioned by  

the car manufacturer; and thus invalidates the warranty。 

      Getting back to the translation ponent; it exposes the method TranslateHello() and  

has responsibilities。 And the caller of TranslateHello() has the responsibility of being reason

able about what can be expected to be translated。 So; is whitespace sent by the caller reasonable?  

      If the whitespace is a normal circumstance; then the failed test is a bug in the ponent。  

But if the whitespace is not a normal circumstance; the caller is wrong and must be fixed。 The  

answer is that the caller is being reasonable; and the ponent is not acting properly。 We  

have a bug in the ponent that needs to be fixed。 How do I know that the caller is not being  

reasonable? I made it up; because that is how I expected the contract to be implemented。 The  

key is in defining a good contract。 

      The bug in the ponent relates to the problem of how a word is being translated。 We  

used the pareTo() method; which means that each character is pared; position for  

position。 The test failed because the caller passed in a string with whitespace; and the ponent  

expected no whitespace。 This bug is not a surprise; because we humans ignore the whitespace; but  

puters cannot。  

      Before I explain how to fix the bug; I need to take a step back and talk about what a string  

is and how you can figure out what a string can do。  



Investigating the String Type 



String is a class type; and thus a reference type。  String is a type that has methods and proper

ties。 Value types like Double and Integer have methods and properties; but String is the first  

type you are encountering that is a class in its own right (Double and Integer are not actually  

classes)。 

      To investigate a type; you can read the documentation; or you can use IntelliSense。 Reading  

the documentation is not a bad idea; but it is the slowest and most cumbersome。 IntelliSense  

is an  IDE approach; in which a defined type’s methods and properties are presented to you in  

an easy…to…prehend manner。 

      The first time you use IntelliSense; it can be nerve…racking; because it seems like the IDE  

has a life of its own。 There is a convention on how to use IntelliSense; as illustrated in Figure 3…2。  

I suggest that you take a few moments to experiment with it。 I also remend that you keep  

IntelliSense active in Visual Basic Express。 


…………………………………………………………Page 78……………………………………………………………

56         CH AP T E R   3   ■    L E A R N IN G   AB OU T   ST R I N G   M A N I P U L AT IO N S   



           Figure 3…2。  Using IntelliSense on a String typed variable 



                 IntelliSense works on only identified variables that have types。 In Figure 3…2; IntelliSense  

           worked because the IDE parsed the code and had the ability to read the metadata associated  

           with the type。 Metadata is data that describes your source code。 Whenever you define a class;  

           methods and properties are associated with it。 The method and property descriptions are  

           pieces of metadata that is displayed by IntelliSense。 One of the strengths of  is that all  

           types have metadata。 



           The Basis of All Types: Object 



           By default; everything in  is an object with a few basic properties and methods。 Four basic  

       
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!