मैं प्रोग्रामिंग, OOP और यूनिट टेस्ट के लिए नया हूं, इसलिए कृपया मुझे ज्ञान की कमी के लिए क्षमा करें।
मेरे रॉक, पेपर और कैंची गेम के हिस्से के रूप में मेरे पास एक अमूर्त सुपरक्लास है (हथियार) जिसमें उपवर्ग हैं (रॉक, पेपर और कैंची) VB.NET में:
Public MustInherit Class Weapons
Public MustOverride Function compareTo(ByVal Weapons As Object) As Integer
End Class
Public Class Paper
Inherits Weapons
Public Overrides Function compareTo(ByVal Weapons As Object) As Integer
If TypeOf Weapons Is Paper Then
Return 0
ElseIf TypeOf Weapons Is Rock Then
Return 1
Else
Return -1
End If
End Function
End Class
Public Class Rock
Inherits Weapons
Public Overrides Function compareTo(ByVal Weapons As Object) As Integer
If TypeOf Weapons Is Rock Then
Return 0
ElseIf TypeOf Weapons Is Scissors Then
Return 1
Else
Return -1
End If
End Function
End Class
Public Class Scissors
Inherits Weapons
Public Overrides Function compareTo(ByVal Weapons As Object) As Integer
If TypeOf Weapons Is Scissors Then
Return 0
ElseIf TypeOf Weapons Is Paper Then
Return 1
Else
Return -1
End If
End Function
End Class
एक सुपरक्लास भी है खिलाड़ी जिसके उपवर्ग हैं (PlayerComputerRandom, खिलाड़ीहुमलेयर तथा PlayerComputerTactical) पसंद:
Imports RockPaperScissors.Weapons
Public Class Player
Private pName As String
Private pNumberOfGamesWon As String
Public pWeapon As Weapons
Property Name() As String
Get
Return pName
End Get
Set(ByVal value As String)
pName = value
End Set
End Property
Property NumberOfGamesWon As String
Get
Return pNumberOfGamesWon
End Get
Set(ByVal value As String)
pNumberOfGamesWon = value
End Set
End Property
Property getWeapon As Weapons
Get
Return pWeapon
End Get
Set(ByVal value As Weapons)
pWeapon = value
End Set
End Property
Public Sub pickWeapon(ByVal WeaponType As String)
If WeaponType = "Rock" Then
pWeapon = New Rock()
ElseIf WeaponType = "Paper" Then
pWeapon = New Paper()
Else
pWeapon = New Scissors()
End If
End Sub
End Class
Imports RockPaperScissors.Weapons
Public Class PlayerComputerRandom
Inherits Player
Private Enum weaponsList
Rock
Paper
Scissors
End Enum
Public Overloads Sub pickWeapon()
Dim randomChoice = New Random()
Dim CompChoice As Integer = randomChoice.Next(0, [Enum].GetValues(GetType(weaponsList)).Length)
If CompChoice = "0" Then
pWeapon = New Rock()
ElseIf CompChoice = "1" Then
pWeapon = New Paper()
Else
pWeapon = New Scissors()
End If
End Sub
End Class
Public Class PlayerComputerTactical
Inherits Player
Private plastMove As String
Property lastMove() As String
Get
Return plastMove
End Get
Set(ByVal value As String)
plastMove = value
End Set
End Property
Public Overloads Sub pickWeapon()
" Add tactical player functionality
End Sub
End Class
Public Class PlayerHumanPlayer
Inherits Player
End Class
मेरे पास गेमफ़ॉर्म क्लास है जो ऑब्जेक्ट्स को त्वरित करता है और सामने दिखाए गए अंत के लिए उपयोग किए गए विभिन्न अन्य तर्क करता है जैसा कि नीचे दिखाया गया है:
Public Class GameForm
Private Sub btnRock_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRock.Click
findWinner("HumanPlayer", "Rock", "RandomComputer")
End Sub
Private Sub btnPaper_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPaper.Click
findWinner("HumanPlayer", "Paper", "RandomComputer")
End Sub
Private Sub btnScissors_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnScissors.Click
findWinner("HumanPlayer", "Scissors", "RandomComputer")
End Sub
Public Sub findWinner(ByVal p1name As String, ByVal p1WeaponSelected As String, ByVal p2Name As String)
Dim player1 = New PlayerHumanPlayer()
Dim player2 = New PlayerComputerRandom()
player1.Name = p1name
player1.pickWeapon(p1WeaponSelected) " Should I be using the Rock Class???
player2.Name = p2Name
player2.pickWeapon()
Dim winner As Integer = player1.getWeapon().compareTo(player2.getWeapon())
Select Case winner
Case 1
txtGameStatus.Text = player1.Name() + " wins!"
Case -1
txtGameStatus.Text = player2.Name() + " wins!"
Case 0
txtGameStatus.Text = "Draw!"
End Select
End Sub
End Class
मुझे विज़ुअल का उपयोग करके इसके यूनिट टेस्ट लिखने की आवश्यकता हैस्टूडियो 2010. जैसा कि मैंने कभी ऐसा नहीं किया है, मुझे पता नहीं है कि मैं किस यूनिट के परीक्षण को शामिल कर सकता हूं (इसके अलावा स्टैंड जोड़ने / हटाने के उदाहरण)। बिंदु।
किसी भी तरह की सहायता का स्वागत किया जाएगा।
अग्रिम धन्यवाद
उत्तर:
उत्तर № 1 के लिए 1आपको इस बात का एक उदाहरण देने की कोशिश करने के लिए कि आप इसे कैसे बना सकते हैं:
इसके बजाय, सबसे पहले:
Public Overloads Sub pickWeapon()
" Logic...
End Sub
आप ऐसा कुछ करना चाहते हैं:
Public Overloads Function pickWeapon() as Weapons
Dim selectedWeapon as Weapons = Nothing;
// logic to set weapon here
return selectedWeapon;
End Sub
अब आप एक UnitTest से कॉल कर सकते हैं, और यह सुनिश्चित कर सकते हैं कि यह एक ऑब्जेक्ट लौटाता है, जो एक वैध हथियार है, उदाहरण के लिए (जरूरी नहीं कि सबसे उपयोगी परीक्षण, लेकिन उम्मीद है, आपको बिंदु मिल जाएगा! :))।
यदि आपका पुनर्गठन विधि findWinner()
एक समान तरीके से, आप परीक्षण कर सकते हैं कि उस पद्धति का तर्क सही विजेता पाता है।
हालाँकि, ध्यान दें कि आपको हथियार लेने वाले से विजेता खोजने के लिए तर्क को अलग करना चाहिए। यही है, आपको खिलाड़ियों को उस पद्धति के बाहर बनाना चाहिए, और उन्हें अंदर पास करना चाहिए findWinner()
। यह आपको कुछ विकल्पों (हथियारों) में पास होने देगा, और जांच करेगा कि आपको अपेक्षित परिणाम मिला है। आप इस समय ऐसा नहीं कर सकते हैं, क्योंकि "प्लेयर 2" का उपयोग किया जाने वाला हथियार यादृच्छिक रूप से अंदर से चुना जाता है findWinner()
.
इसे बदलकर शुरू करें ताकि इसमें निम्नलिखित के समान हस्ताक्षर हों:
" Takes two players in, and returns the name of the winner
Public Sub findWinner(ByVal humanPlayer As PlayerHumanPlayer,
ByVal computerPlayer As PlayerComputerRandom) As String
ए (बहुत ही सरल) परीक्षण, यह मानते हुए कि आपने इसे फिट करने के लिए कोड को फिर से लिखा है:
<TestMethod()> _
Public Sub ShouldReturnPlayer1AsWinner()
Dim player1 = New PlayerHumanPlayer("Human name", New Scissors())
Dim player2 = New PlayerComputerRandom("Computer", New Rock())
Dim result As String = findWinner(player1, player2)
Assert.AreEqual(result, "Computer")
End Sub
फिर, यह सबसे अच्छा परीक्षण नहीं हो सकता है, लेकिन यह आपको एक विचार देना चाहिए, और आपको आरंभ करने में मदद करेगा।
सिडेनोट: मैं सुपर-क्लास कहूंगा Weapon
, नहीं Weapons
। इसे इस तरह से सोचें: आपके पास इसके कई अलग-अलग उदाहरण हो सकते हैं, और वे अलग-अलग हथियार (कागज, कैंची, आदि) हो सकते हैं, लेकिन प्रत्येक अभी भी एक ही हथियार है।
जवाब के लिए 2 № 2
मेरा पहला टिप आप सभी को बदलना होगाकार्यों में विधियां जो एक मान लौटाती हैं, यह उन तरीकों के लिए है जिन्हें आप इकाई परीक्षण करना चाहते हैं। ऐसा करने से यह सुनिश्चित होगा कि आप एक इकाई परीक्षण के लिए फ़ंक्शन का उपयोग कर सकते हैं।
मैं आपको संरचना के लिए मदद दे सकता हूं, लेकिन मुझे डर नहीं है कि मैं आपके लिए अपनी इकाई परीक्षण कर रहा हूं!
बीमार आपको एक उदाहरण इकाई परीक्षण दिखाता है जो मेरे पास हैएक समाधान, यह आपके समाधान के लिए प्रासंगिक नहीं हो सकता है लेकिन संरचना फिर भी है। सबसे पहले मेरे पास फंक्शन (ऐड) है जिसे मैं टेस्ट करना चाहूंगा, और एक यूनिट टेस्ट प्रोजेक्ट में मेरे पास टेस्ट होगा।
परीक्षण करने का कार्य
Public Function Add(value1 As Int32, value2 As Int32)
answer = value1 + value2
Return answer
End Function
यह इकाई परीक्षण है जो मैं अपनी इकाई परीक्षण कक्षा के भीतर उपयोग कर रहा हूं
<TestMethod()> _
Public Sub AddTest()
Dim target As Form1 = New Form1()
Dim value1 As Int32 = 10
Dim value2 As Int32 = 35
Dim actual As Int32 = 45
Dim result As Int32 = target.Add(value1, value2)
Assert.AreEqual(result, actual)
End Sub