Creare un Test NUnit

Bello TestDriven.NET però manca una funzionalità: creare un progetto di test per il progetto corrente...
A questo proposito da un po' di tempo mi sono fatto una bella Macro...
Perché non l'ho mai postata? Beh, é un po' empirica, funziona solo per VB.NET e crea il progetto di test solo per il primo progetto della lista... E' da un bel po' che mi propongo di migliorarla e farne un add-in, ma alla fine non ho mai tempo, così... prendela per quello che é... e modificatela...

Cosa fa:
Prende il primo progetto della vostra soluzione, crea una sottocartella che si chiama come la costante TestClassName (oppure vi avverte che la cartella esiste già ed esce), crea un file .vbproj e un .vb. Il .vbproj include i riferimenti e imports a nunit.framework ed al progetto di partenza, la soluzione viene configurata per partire dal progetto di test avviando la GUI di NUnit (SOLO IN DEBUG). E' MOLTO empirica e "spannometrica", diciamo che andrebbe considerata come la base di qualcos'altro che farò...

Visto che nessuno leggerà fino in fondo a questo post saluto qui tutti i presenti al workshop di ieri, Faccio i miei migliori complimenti a tutti i relatori ed in modo particolare ad Andrea Saltarello che é anche stato organizzatore!

Imports EnvDTE
Imports System.Diagnostics
Imports System.Windows.Forms
Imports System.IO
Public Module NUnitModule
Private Const TestProjectName As String = "Test"
Private Const NUnitExePath As String = "c:\Programmi\NUnit V2.1\bin\nunit-gui.exe"
Private Const TestClassName As String = "Test"
Private Const NUnitFrameworkPath As String = "c:\Programmi\NUnit V2.1\bin\nunit.framework.dll"
Private WithEvents SolEvents As EnvDTE.ProjectItemsEvents = DTE.Events.SolutionItemsEvents
 
Sub CreateTestProject()
Dim Projs As System.Array = DTE.ActiveSolutionProjects()
Dim Project As Project = DirectCast(Projs.GetValue(0), Project)
Dim ProjectFI As New System.IO.FileInfo(Project.FullName)
Dim ProjectFolder As System.IO.DirectoryInfo = ProjectFI.Directory
Dim TestProjectFolder As New System.IO.DirectoryInfo(Barra(ProjectFolder.FullName) & TestProjectName)
Dim TestProjectFI As New System.IO.FileInfo(Project.FullName)
If TestProjectFolder.Exists Then
MessageBox.Show("La cartella di destinazione esiste già")
Else
TestProjectFolder.Create()
Dim TestProject As Project = CreateTestProjectFiles(Project, TestProjectFolder.FullName, TestProjectName)
TestProject.ProjectItems.AddFromFile(CreateTestClass(TestProjectFolder.FullName, TestClassName))
Dim SolutionName As String = Path.GetFileNameWithoutExtension(DTE.Solution.FullName)
DTE.ActiveWindow.Object.GetItem(SolutionName & "" & TestProjectName).Select(vsUISelectionType.vsUISelectionTypeSelect)
DTE.ExecuteCommand("Project.SetasStartUpProject")
End If
End Sub
Private Function CreateTestProjectFiles(ByVal BaseProject As Project, ByVal TestProjectFolder As String, ByVal TestProjectName As String) As Project
TestProjectFolder = Barra(TestProjectFolder)
Dim TestProjFileName As String = TestProjectFolder & TestProjectName & ".vbproj"
'Creazione file vbproj
Dim ProjFS As New FileStream(TestProjFileName, FileMode.Create, FileAccess.Write)
Dim XW As New System.Xml.XmlTextWriter(ProjFS, System.Text.Encoding.UTF8)
Try
XW.WriteStartElement("VisualStudioProject")
XW.WriteStartElement("VisualBasic")
XW.WriteStartElement("Build")
XW.WriteStartElement("Settings")
XW.WriteAttributeString("OutputType", "Library")
XW.WriteAttributeString("StartupObject",
String.Empty)
XW.WriteStartElement("Config")
XW.WriteAttributeString("Name", "Debug")
XW.WriteAttributeString("DebugSymbols", "true")
XW.WriteAttributeString("DefineDebug", "true")
XW.WriteAttributeString("DefineTrace", "true")
XW.WriteAttributeString("IncrementalBuild", "true")
XW.WriteAttributeString("OutputPath", "bin")
XW.WriteAttributeString("StartAction", "Program")
XW.WriteAttributeString("StartArguments", TestProjectName & ".dll")
XW.WriteAttributeString("StartPage", "")
XW.WriteAttributeString("StartProgram", NUnitExePath)
XW.WriteAttributeString("StartURL", "")
XW.WriteAttributeString("StartWorkingDirectory", TestProjectFolder & "bin")
XW.WriteEndElement()
'Config
XW.WriteStartElement("Config")
XW.WriteAttributeString("Name", "Release")
XW.WriteAttributeString("DebugSymbols", "false")
XW.WriteAttributeString("DefineDebug", "false")
XW.WriteAttributeString("DefineTrace", "true")
XW.WriteAttributeString("IncrementalBuild", "false")
XW.WriteAttributeString("Optimize", "true")
XW.WriteAttributeString("OutputPath", "bin")
XW.WriteEndElement()
'Config
XW.WriteEndElement() 'Settings
XW.WriteStartElement("References")
XW.WriteStartElement("Reference")
XW.WriteAttributeString("Name", "System")
XW.WriteEndElement()
'Reference
XW.WriteStartElement("Reference")
XW.WriteAttributeString("Name", "System.Data")
XW.WriteEndElement()
'Reference
XW.WriteStartElement("Reference")
XW.WriteAttributeString("Name", "System.XML")
XW.WriteEndElement()
'Reference
XW.WriteStartElement("Reference")
XW.WriteAttributeString("Name", "nunit.framework")
XW.WriteAttributeString("AssemblyName", "nunit.framework")
XW.WriteAttributeString("HintPath", NUnitFrameworkPath)
XW.WriteEndElement() 'Reference
XW.WriteStartElement("Reference")
XW.WriteAttributeString("Name", BaseProject.Name)
MessageBox.Show(BaseProject.UniqueName)
Dim FI As New System.IO.FileInfo(BaseProject.FullName)
XW.WriteAttributeString("HintPath", Barra(Barra(FI.DirectoryName) & "bin") & BaseProject.Name & ".dll")
XW.WriteEndElement() 'Reference
XW.WriteEndElement() 'References
XW.WriteStartElement("Imports")
XW.WriteStartElement("Import")
XW.WriteAttributeString("Namespace", "Microsoft.VisualBasic")
XW.WriteEndElement()
'Import
XW.WriteStartElement("Import")
XW.WriteAttributeString("Namespace", "System")
XW.WriteEndElement()
'Import
XW.WriteStartElement("Import")
XW.WriteAttributeString("Namespace", "System.Collections")
XW.WriteEndElement()
'Import
XW.WriteStartElement("Import")
XW.WriteAttributeString("Namespace", "System.Data")
XW.WriteEndElement()
'Import
XW.WriteStartElement("Import")
XW.WriteAttributeString("Namespace", "System.Diagnostics")
XW.WriteEndElement()
'Import
XW.WriteStartElement("Import")
XW.WriteAttributeString("Namespace", "nunit.framework")
XW.WriteEndElement()
'Import
XW.WriteStartElement("Import")
XW.WriteAttributeString("Namespace", BaseProject.Name)
XW.WriteEndElement()
'Import
XW.WriteEndElement() 'Imports
XW.WriteEndElement() 'Build
XW.WriteStartElement("Files")
XW.WriteStartElement("Include")
XW.WriteEndElement()
'Include
XW.WriteEndElement() 'Files
XW.WriteEndElement() 'VisualBasic
XW.WriteEndElement() 'VisualStudioProject
Finally
XW.Flush()
ProjFS.Flush()
ProjFS.Close()
End Try
CreateTestProjectFiles = DTE.Solution.AddFromFile(TestProjFileName)
End Function
Private Function CreateTestClass(ByVal TestProjectFolder As String, ByVal TestClassName As String)
TestProjectFolder = Barra(TestProjectFolder) & TestClassName & ".vb"
Dim FS As New FileStream(TestProjectFolder, FileMode.Create, FileAccess.Write)
Try
Dim SW As New StreamWriter(FS)
Try
SW.WriteLine("<TestFixture()> _")
SW.WriteLine("Public Class " & TestClassName)
SW.WriteLine("#Region ""Setup e TearDown""")
SW.WriteLine(" <TestFixtureSetUp()> _")
SW.WriteLine(" Public Sub Setup()")
SW.WriteLine()
SW.WriteLine(" End Sub")
SW.WriteLine()
SW.WriteLine(" <TestFixtureTearDown()> _")
SW.WriteLine(" Public Sub TearDown()")
SW.WriteLine()
SW.WriteLine(" End Sub")
SW.WriteLine("#End Region")
SW.WriteLine()
SW.WriteLine(" <Test()> _")
SW.WriteLine(" Public Sub Test()")
SW.WriteLine()
SW.WriteLine(" End Sub")
SW.WriteLine("End Class")
Finally
SW.Flush()
End Try
Finally
FS.Flush()
FS.Close()
End Try
Return TestProjectFolder
End Function
Private Function Barra(ByVal Path As String) As String
If Path = String.Empty OrElse Path.EndsWith(System.IO.Path.DirectorySeparatorChar) Then
Return Path
Else
Return Path & System.IO.Path.DirectorySeparatorChar
End If
End Function
End
Module

Print | posted on venerdì 3 dicembre 2004 19:40

Comments have been closed on this topic.