Thursday, August 30, 2007

Unit testing in .NET

NUnit: Unit testing framework for .NET

I had only theoretical knowledge about the unit testing until I came across NUnit. Later I've realized that NUnit can make a huge impact in the quality of the code as well as the project and how helpful it is for a .NET developer. Its very hard to maintain huge chunks of code and it will become real difficult to keep track of changes in a huge project. NUnit will come into picture here.
TDD (Test driven development) and extreme programming:
According to Aslam : "you have a requirement, you will start writing test code for the requirement before writing the actual code, obviously test fails when trying to run the test because the actual code is missing , then you will start writing the actual code.This method is called as TDD."
isn't TDD crazy!!? :)
Let me conclude, Test driven development involves 3 stages,
1.write a test 2.write code to pass the test 3.refactor the code to make it simpler and flexible

When TDD is getting used? Suppose the changes in requirement is so frequent and thus it results an overhead for the developer to keep track of the changes in code. TDD is a solution for the above mentioned problem.
And the only way to understand TDD is to do it.
TDD(test driven development) is an extreme programming technique. There will be a corresponding test code for every functionality in the actual code. Now comes the question, how will you write the unit test code in .NET? And the answer is NUnit.
Here is a scenario on how to use NUnit.
1. Account.cs :
using System;
using System.Collections.Generic;
using System.Text;

namespace bank
{
public class Account
{
private float balance;
public void Deposit(float amount)
{
balance += amount;
}

public void Withdraw(float amount)
{
balance -= amount;
}

public void TransferFunds(Account destination, float amount)
{
}

public float Balance
{
get { return balance; }
}
}
}
2. AccountTest.cs : unit test for Account.cs
using System;
using System.Collections.Generic;
using System.Text;

namespace bank
{
using NUnit.Framework;

[TestFixture]
public class AccountTest
{
[Test]
public void TransferFunds()
{
Console.Out.WriteLine("start testing...");
Console.Out.WriteLine("creating source object...");
Account source = new Account();
source.Deposit(200.00F);
Console.Out.WriteLine("creating destination object...");
Account destination = new Account();
destination.Deposit(150.00F);
Console.Out.WriteLine("transfer funds...");
source.TransferFunds(destination, 100.00F);
Assert.AreEqual(150.00F, destination.Balance);
Assert.AreEqual(200.00F, source.Balance);
Console.Out.WriteLine("end testing...");
}
}
}

3. Run the test (using GUI-Runner ie, nunit-gui.exe)



Here test is successful and thus indicating in green color.


Reference: http://www.nunit.org/


And
NUnit was my first work in IBM, and Thanks to Aslam(TPM) for
giving me the opportunity to dig into NUnit. And later my learnings are
recognized and added as an IBM asset in code library!! :)

Friday, August 24, 2007

SAP.NET Connectivity

In the initial days of my career I always used to wonder how the integration takes place between two technologies, but never got a chance to work with one. Later i realized that "Opportunities are vast and it will come to you even if it is late". And I got a chance to work with .NET and SAP integration.

My objective of this blog is to explain the SAP.NET connectivity. ie, connecting to SAP from a .NET web Service. Prerequisites for achieving the connectivity are:

  1. Microsoft visual studio 2003
  2. SAP.NET connector 2.0
  3. Java runtime environment
  4. SAP client (Optional)
Perform the following steps:

  1. Install SAP.NET Connector 2.0 (Ensure that Microsoft Visual Studio .NET 2003 is already installed on the PC before installing SAP.NET Connector)
  2. Install Java runtime environment (j2sdk-1_4_2_05-windows-i586-p.exe)
    Note: Java Runtime Environment require for generating SAP proxy.

  3. Open .NET solution (Here I’m explaining with respect to Web service)
  4. Open Server explorer from the .NET Solution and you can see SAP addin appearing on the Server explorer. Note: SAP addin will appear on server explorer only after the installation of SAP.NET Connector 2.0




  5. Expand SAP addin in the server explorer and Select Application Server and Right click - “Add an application server”.





  6. Configure application server :

    Destination type : Custom logon settings
    AppServerHost : 10.222.21.35
    SystemNumber : 0
    UserName : mmdemo
    password : ******
    client : 200
    Language : EN





  7. Expand application server – Functions – “Add Function Filter…” – and add the following filters

    GroupFilter : *
    NameFilter : *






  8. Expand Functions after setting function filters and you will get the list of BAPIs (Business APIs) on the server explorer





  9. Add a new SAP connector proxy class to the solution from the solution explorer.




  10. drag and drop particular BAPI on to the design view of Proxy class.






  11. Build the solution after retrieving data
  12. Go to the design view of design view of ASMX file. And select Toolbox - SAP Proxy





  13. Drag and drop the proxy from the toolbox to the design view of ASMX file.




  14. Create web method that makes use of the proxy.


    //SAP Connectionstring
    public string _CONNECTIONSTRING="ashost=10.222.21.35 sysnr=0 client=200 passwd=newuser type=3 user=mmdemo";
    //SAP proxy
    private wsSAPdotnet.MySAPProxy mySAPProxy1;

    [WebMethod]
    public DataSet GetData()
    {
    DataSet dsData=new DataSet();

    //Initialize SAP proxy
    mySAPProxy1=new MySAPProxy(_CONNECTIONSTRING);
    //Open proxy connection
    mySAPProxy1.Connection.Open();

    //Parameters for the BAPI
    ZBAPIMATGRPTable Matgrp_List=new ZBAPIMATGRPTable();
    ZBAPIPLANTTable Plant_List=new ZBAPIPLANTTable();
    ZBAPIPURGRPTable Purgrp_List=new ZBAPIPURGRPTable();
    BAPIRETURNTable Return0=new BAPIRETURNTable();

    //Invoke BAPI and the result will be present in
    //the 4 parameters
    mySAPProxy1.Bapi_Plant_Mat_Pur_Grp(
    ref Matgrp_List,
    ref Plant_List,
    ref Purgrp_List,
    ref Return0);

    //Close proxy connection
    mySAPProxy1.Connection.Close();

    //Convert SAPTable to DataTable and add it to dataset
    dsData.Tables.Add(Matgrp_List.ToADODataTable());
    dsData.Tables.Add(Plant_List.ToADODataTable());
    dsData.Tables.Add(Purgrp_List.ToADODataTable());

    return dsData;
    }


  15. Compile the solution and execute it
  16. p.s : Here is your webservice !! And you can access SAP just by
    invoking the webmethod which we'd creaded just now!!


  17. Invoke web method GetData and which returns the data from SAP.




These 16 steps will allow a typical microsoft developer like me to access and do transactions in a SAP server :)
And
Thanks to SAP for providing the SAP.NET Connector and special
thanks to Ram(PM,L&T) for giving me the wonderful opportunity to make my hand dirty by doing the integration between Microsoft.NET and SAP!!