Common method for outputting arrays and lists of any type

In unit tests I might want to output the results of a returned list of any type. Instead of writing a new method for each type, here are some techniques with thanks to:

http://stackoverflow.com/questions/9655262/common-method-for-printing-arrays-and-lists-of-any-types

Using Join

Split is a useful function, here is the reverse Join

int[] actual = new int[] {1,2,3}

string actual = new string[] {“one”, “two”, “three”}

TestContext.WriteLine(string.Join(“, “, actual));

 

Using Generics

public void PrintCollection<T>(IEnumerable<T> col)
{
foreach (var item in col) TestContext.WriteLine(item);
}

 

Using ForEach(Action a)

http://msdn.microsoft.com/en-us/library/bwabdf9z(v=vs.110).aspx

[TestMethod()]
publicvoid AListTest()
{
List<string> target = newList<string>();
target.ForEach(PrintCollection2);
}

privatevoid PrintCollection2(string s)
{
TestContext.WriteLine(s);
}

 

 

 

Advertisements

Database Unit Test

 

Cool – Easy – Very Useful

 

 

Test Project Root Namespace disabling referenced project namespace

PROBLEM
Had a project SRS.Business.EntityModel
and so created TestProject.SRS.Business.

SOLUTION
I found that this project could not code against the first. However when I subtly changed the Test Project Root Namespace in this case to TestProject.SRSBusiness it worked.

How to use “external” configuration files e.g. SharedApp.config with a test project?

Error:
Test method TestProjectBusiness.dsBusinessHelperTest.FillAdviceNoteTest threw exception:
System.Configuration.ConfigurationErrorsException: Unable to open configSource file ‘SharedApp.config’. (…Visual Studio 2010\Projects\…\TestResults\…\Out\TestProject.DLL.config line 8)

Solution at:
http://stackoverflow.com/questions/152866/how-can-you-use-external-configuration-files-i-e-with-configsource-with-an-m

Quote
“If you edit the test run configuration (by double clicking the .testrunconfig file that gets put into the ‘Solution Items’ solution folder when you add a new unit test), you get a test run configuration dialog. There’s a section there called ‘Deployment’ where you can specifiy files or whole folders from anywhere in the solution that can be copied out with the compiled assemblies at run time to the correct folder.

In this way, I can now actually just define most of my configuration in one set of external .config files and have them automatically copied out at the run of each test.”

My Notes:
This works. You may have to close and re-open the test run – test list editor .vsmdi for the appropriate test-settings to take affect.

‘Assembly.Namespace(s).ClassName.Private Sub MethodName’ is not accessible in this context because it is ‘Private’

 If when coding a new test you get the following error:

‘Assembly.Namespace(s).ClassName.Private Sub MethodName’ is not accessible in this context because it is ‘Private’

  • Go to Method Name for which you wish to create test
  • Create a private accessor
  • Go to test method you are creating
  • Change the type of the object you are creating to ..ClassName_Accessor
  • You should now be OK. May need to change some to ..ClassName_Accessory and not others

Good when you know how

Data-Driven Unit Tests

See Book Wrox Professional Application Lifecycle Management p121
VS > Test > Windows > Test View > Select Test > Properties
Data Connection String .. Elipse or type “Data Source=ServerName;Initial Catalog=DatabaseName;Integrated Security=True”
Data Table Name: Name of Schema.Table or View with data list

Alternatively in code:
    Public Property TestContext() As TestContext

    <TestMethod(), DataSource(“System.Data.SqlClient”, “Data Source=ServerName;Initial Catalog=DatabaseName;Integrated Security=True”, “SchemaName.TableOrViewName”, DataAccessMethod.Sequential)> _
    Public Sub SQLViewTest()
TestContext.DataRow(ColumnName or Index).ToString

Team City – Continuous Integration and Automated Testing

 
If Team City returns "Failure" > "Build Errors"
error MSB4019: The imported project "C:\Microsoft.VisualBasic.targets" was not found.
Then Team City is not using Microsoft Framework 3.5
Then go to Project Settings > Runner >
If using Visual Studio 2008 for a project .proj file then use
MSBuild
Build Version 3.5
Tools Version 3.5
 

 
Sln2008 only for solution files
 

 
Move to Server
 
Download – install – choose port
Access from another computer by using server address : port no.
 

 
Using Microsoft SQL Server
 
 
In order to use Windows Authentication need to copy dll file. In my case was
…Microsoft SQL Server JDBC Driver\sqljdbc_2.0\enu\auth\x86\sqljdbc_auth.dll
into Windows\System32 directory
 
 
file database.properties was
driverName=com.microsoft.sqlserver.jdbc.SQLServerDriver
connectionUrl=jdbc:sqlserver://localhost:<port>;database=TeamCity;
connectionProperties.integratedSecurity=true
 
 
 
 
 
 
 

How do I find a text in SQL Object ?

 
Started with:
 
 
Adapted to:

ALTER PROCEDURE [Testing].[uspFindText]

@DatabaseName

nvarchar(50) = ‘EFI’
, @TextToFind nvarchar(100)
–, @Type int = 0 –0 = ALL, 1 = PROCEDURE

AS

DECLARE

@SQL nvarchar(500)
SELECT @SQL = ‘SELECT ROUTINE_TYPE, SPECIFIC_SCHEMA, ROUTINE_NAME, ROUTINE_DEFINITION
FROM [‘
+ @DatabaseName + ‘].INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE ”%’
+ @TextToFind + ‘%”’

–SELECT @SQL = @SQL + ‘ AND ROUTINE_TYPE=”PROCEDURE”’

PRINT

@SQL
EXECUTE(@SQL)