Internship weak 4#4 at Thomson Reuters (Thailand) | ทำ Unit testing โดยใช้ NUnint

Unit testing ก็คือ รูปแบบของการ test รูปแบบหนึ่งที่ผู้ test ก็คือ developer เอง   การ test จะทำตั้งแต่ระดับของ methods, properties, clesses และ assemblies  ลำดับของการทำ unit testing อยู่ในภาพด้านล่าง

Unit Testing in Application Development

NUnit

คือ tool ที่ใช้อำนวยความสะดวกในการทำ unit testing หรือเรียกๆ กันว่า unit testing framework     ทำการ test บนพื้นฐานของ .NET platform   ข้อจำกัดของ NUnit

  1. NUnit ไม่ใช่เครื่องมือ GUI automate testing
  2. ไม่ใช่ภาษา script แต่ต้่องเขียน test เอง ภาษาที่สามารถเขียนได้ก็คือภาษาที่ .NET support เช่น C#, VC, VB.NET, J# บลาๆๆๆ

ขั้นตอนการใช้ NUnit

อ้างอิง:

http://www.nunit.org/

http://www.codeproject.com/Articles/178635/Unit-Testing-Using-NUnit

Internship weak 4# at Thomson Reuters (Thailand) – Create Logger using Trace Listener in C#

วันนี้ตื่นสายมา 9.30  T_T  มาถึงก็ซัดข้าวหมูกรอบหน้า 7-11 ข้างๆตึกก่อนเลย 35 บาืท  ขึ้นมาถึงก็แชตกับเพื่อน

http://www.daveoncsharp.com/2009/09/create-a-logger-using-the-trace-listener-in-csharp/

Trace Listener in C# / การสร้าง Log file โดยใช้ Trace Listener ใน C#

เมื่อเราสร้าง application เพื่อใช้ในโลกของธุระกิจ     มีความจำเป็นมากที่ application  สามารถที่จะ log error ไว้ได้   แล้วถามว่าทำเพื่ออะไำร   ก็เพราะ  เมื่อเวลาที่เราส่งโปรแกรมให้ลูกค้าใช้งาน  เมื่อมีเหตุการณ์ที่มีการ error เกิดขึ้น  ลูกค้าจะไม่รู้เลยว่า error เพราะอะไร จะต้องคุยกันยาวเหยีดกับลูกค้าที่ไม่รู้เรื่อง error     ดังนั้นเมื่อมี log file  เราสามารถที่จะให้มัน ส่ง log error ที่ได้กลับมาให้เรา  และเราจะรู้ถึงปัญหาได้ทันที  โดยที่คุยกับลูกค้านิดเดียว หรือไม่คุยเลย

Log file นั้นสามารถเก็บไว้ได้หลายรูปแบบ เช่น Database, Text file, หรือ เป็น event ของ Windows EventLog ก็ได้       แต่มีอยู่เครื่องมือหนึ่งที่จะช่วยให้เราสร้าง log file ได้ง่ายๆ ที่อยู่ใน .NET framework เป็นกลไกที่เรียกว่า TraceListener

Trace Listener ก็คือ object ที่ใช้สำหรับดักจับ error ที่เกิดขึ้น แล้วทำการ trace output ออกมาในรูปแบบที่เราต้องการ   ในตัวอย่างนี้  เราจะแสดงวิธีการใช้่งาน TraceListener ในการบันทึก error ในโปรแกรมของเราลงใน error log file

ลงมือทำ

เริ่มแรกให้เราสร้าง Console Application  และ add App.config gile เข้าใน project เราจะใช้ App.config นี้ในการที่จะบอกapplication ของเราว่าให้ทำการสร้าง trace listener ตอนรันโปรแกรม   ให้เราทำการแก้ไข code ใน App.config  ให้เป็นแบบด้านล่างนี้

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <trace autoflush="true" indentsize="4">
      <listeners>
        <add name="myListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="application.log" />
        <remove name="Default" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

จาก code จะเห็นว่าเราทำการ add System.Diagnostics.TextWriterTraceListener ใช้เป็นตัวสำหรับเขียน log file ให้ และ application.log เป็นชืื่อไฟล์ log ของเรานั่นเอง   คราวนี้ดูที่ node <trace> จะเห็นว่าเรากำหนด attribute autoflush ให้เป็น true เพื่อเป็นการให้ clear bffer หลังจากได้ทำการเขียน log ลงในไฟล์แล้ว      สำหรับการจะ set เป็น true หรือ false  นั้นก็ขึ้นอยู่กับความเหมาะสมของหน่วยความจำของเครื่อง

ดังนั้นใน static Main  เราจะมีวิธีการเรีัยกใช้ Trace กะง code ตัวอย่าง

static void Main(string[] args)
{
 Trace.WriteLine("Application started.", "MyApp");

 Trace.WriteLine("working...", "MyApp");

 Trace.WriteLine("Application finished.", "MyApp");
}

และเมื่อเราลองดูข้อมูลในไฟล์ application.log จะเห็นข้อมูลที่ถูกสร้างขึ้นมาอัตโนมัติจาก listener หลังจากที่เีรา run โปรแกรม  ดังไฟล์นี้

MyApp: Application started.

MyApp: working...

MyApp: Application finished.

จะเห็นว่าการสร้าง log file โดยวิธีนี้ง่ายมากโดยที่เราไม่จำเป็นต้องใช้ filestream ในการเขียนไฟล์เลยแม้แต่น้อย

Internship weak 4# at Thomson Reuters (Thailand)

การ execute command จาก C#

code ข้างล่างเราจะสร้าง process แล้วใส่คำสั่งและทำการ execute    ส่วนผลลัำพธ์ที่ได้จากการ execute จะเก็บไว้ใน string variable  ที่สามารถน้ำไปใช้อ้างอิืงต่อไปได้          การ execute ด้วย command นั้นเกิดขึ้นได้สองวิธีคือ synchronously และ asynchronously    ใน asynchronously command เราแค่ใส่ค่ำสั่งที่ต้องการ execute โดยมันจะใช้ thread ทำงานแยกออกไปต่างหาก

Code ด้านล่างเป็นแบบ synchronously command

public void ExecuteCommandSync(object command)
{
     try
     {
         // create the ProcessStartInfo using "cmd" as the program to be run,
         // and "/c " as the parameters.
         // Incidentally, /c tells cmd that we want it to execute the command that follows,
         // and then exit.
    System.Diagnostics.ProcessStartInfo procStartInfo =
        new System.Diagnostics.ProcessStartInfo("cmd", "/c " + command);

    // The following commands are needed to redirect the standard output.
    // This means that it will be redirected to the Process.StandardOutput StreamReader.
    procStartInfo.RedirectStandardOutput = true;
    procStartInfo.UseShellExecute = false;
    // Do not create the black window.
    procStartInfo.CreateNoWindow = true;
    // Now we create a process, assign its ProcessStartInfo and start it
    System.Diagnostics.Process proc = new System.Diagnostics.Process();
    proc.StartInfo = procStartInfo;
    proc.Start();
    // Get the output into a string
    string result = proc.StandardOutput.ReadToEnd();
    // Display the command output.
    Console.WriteLine(result);
      }
      catch (Exception objException)
      {
      // Log the exception
      }
}

code ข้างบนเราทำการกำหนดคำสั่งลงไปโดบเฉพาะ และ ให้ procStartInfo.RedirectStandardOutput ถูก set ให้เป็น true เพราะเราต้องการให้ให้ output เป็นวิธีของการแสดงผลจากหน้าต่าง cmd มาเป็น StreamReader, ส่วน procStartInfo.CreateNoWindow ถูก set ให้เป็น true เพราะเราไม่ต้องการให้หน้าต่าง cmd แสดงออกมา(หน้าต่างดำๆนั่นแหละ) และมันจะประมวลผลเสร็จแบบเงียบๆ ไม่ให้เรารู้ สำหรับ code ข้างล่างต่อไปก็ึเป็นแบบ  asynchronously  command

public void ExecuteCommandAsync(string command)
{
  try {
         //Asynchronously start the Thread to process the Execute command request.
         Thread objThread = new Thread(new ParameterizedThreadStart(ExecuteCommandSync));
         //Make the thread as background thread. objThread.IsBackground = true;
         //Set the Priority of the
         thread. objThread.Priority = ThreadPriority.AboveNormal;
         //Start the
         thread. objThread.Start(command);
         Console.WriteLine("Done");
      }
  catch (ThreadStartException objException)
      {
         // Log the exception
      }
  catch (ThreadAbortException objException)
      {
         // Log the exception
      }
  catch (Exception objException)
      {
         // Log the exception
      }
}

ถ้าเราลองสังเกตุดีๆแล้ว การ execute แบบ asynchronous จริงๆแล้ว ก็ไปเรียกใช้การ execute แบบ synchronous แต่จะไปเรียกใช้ใน thread นั่นเอง จากสองตัวอย่างข้างบน เราจะได้ผลลัพธ์สองแบบ โดยป้อนคำสั่ง “dir” คือ แบบแรกจะแสดงผลลัพธ์ทันทีหลังจาก run ส่วนแบบที่สอง จะแสดงผลลัพธ์หลังจากสถาณะ “Done”

Internship day 14# Thomson Reuters (Thailand) – Basic Windows Service

เหนื่อยสวดๆ แต่ละวันกลับบ้านก็สลบ ไม่ได้เขียนดีๆสักที อิอิ

Learning about Windows Service

First, I created Windows Service already install it into Service by InstallUtil.exe (tool of .Net FW 4.0)

see. How to create a simple Windows Service in C#.   here

Second, I created Console App for start/stop/restart Windows Service which create at fist time.

see. How to Start/Stop/Restart Windows Service Remotely or Locally. here

Internship Weak 3# Thomson Reuters (Thailand)

เริ่มเข้าสู่โลกของ

Web Service + End to end testing + Dynamic Invoke Web Service + SOAP + WSDL + etc

SOAP คืออะไร  Click to read

http://msdn.microsoft.com/en-us/magazine/dd744751.aspx

http://www.ibm.com/developerworks/web/library/wa-selenium2/index.html#download

http://code.google.com/p/selenium/wiki/SeleniumEmulation

Selenium 2

Selemium เป็น framework สำหรับ test web application ถูกสำหรับการทำ functional testing (เป็นการ Test ที่สนใจ Function ของ application นั้นว่าสามารถทำงานจนได้ผลลัพธ์ได้ครบตรงตาม requirement ที่กำหนดมาหรือไม่) ให้หัวข้อนี้จะแสดงตัวอย่างเกี่ยวกับการเปลียนจาก selenium1 เป็น selenium2
ตัวอย่างที่จะนำเสนอ
– การใช้ selenium2
– การ testจากระยไกล
– การย้าย ชุดการทดสอบเก่าจาก selenium1 ไป selenium2

Introduction

Selenium คือ framework ที่นิยมมากสำหรับการ test Web UI, เป็น tool ที่มีประสิทธิภาพในการ test แบบ end to end functional. สารมารถใช้ภาษา programmign ได้หลากหลายในการเขียน test และ selenium ยังสามารถรันตัวเองเข้าไปได้ในหลายๆ browsers ด้วยคือ

– Mozilla Firefox
– Google Chrome
– Microsoft Internet Explorer
– Opera
– Apple iPhone
– Android browsers

ใน Selenium 2 คุณสามารถเขียน test ด้วยภาษา Java, C#, Ruby, and Python.

Internship day 9# at Thomson Reuters (Thailand) / XML + DataGrid + DataTable + DataSet + Binding XML + C#

แก๊กๆๆ ๆๆ ๆๆ     แครกกก แึีครกกกก  (เสียงแป้นพิม กับ เสียง scroll mouse )

——— implement ——————————————————————-

C# XML Parsing – Read a Simple XML File and Retrieve Values

http://stackoverflow.com/questions/5604330/c-sharp-xml-parsing-read-a-simple-xml-file-and-retrieve-values

Binding to a DataTable

http://www.viblend.com/forum/d_postst58_Binding-to-a-DataTable.aspx

WPF – Binding DataTable to a WPF Datagrid

http://www.dotnetspider.com/resources/34103-WPF-Binding-DataTable-WPF-Datagrid.aspx

——— ตกแต่ง ——————————————————————-

Styling Microsoft’s WPF datagrid

http://blogs.msdn.com/b/jaimer/archive/2009/01/20/styling-microsoft-s-wpf-datagrid.aspx

WPF DataGrid ColumnHeaderStyle (LinearGradientBrush)

http://www.codearsenal.net/2012/07/wpf-datagrid-columnheaderstyle.html

WPF Toolkit DataGrid, Part II – Custom styling

http://blog.smoura.com/wpf-toolkit-datagrid-part-ii-custom-styling/

Internship day 7# at Thomson Reuters Thailand (C#: SessionEnding)

สัปดาห์ที่สอง ก็ยังคงเป็นการทบทวน C# อยู่   แต่อาทิตย์หน้าเราจะได้ไปทำอย่างใหม่ที่มันตื่นเต้วววแล้ววว

การ Detection SessionEnding หรือ การตรวจจับเมื่อ windows กำลังจะ shuttdown\log off

เป้าหมายสำหรับการทำก็คือ  สมมติว่า Application ของเรากำลังเปิดอยู่   สมมติว่ามีคนมากด log off หรือ shuttdown แต่โปรแกรมจะแจ้งบอกว่าไม่ให้ปิด โดยให้ session ending ตรวจจับนั่นเอง  พอตรวจจับได้  จะเอาไปทำอะไีีรต่อก็เรืื่องของเืมิิงงง ฮ่าๆๆๆ ล้อเล่ง

ตอนแรกๆทำไม่ได้ มันย๊ากกยาก  แต่พอทำได้เท่านั้นแหละง่ายเลย

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
     Microsoft.Win32.SystemEvents.SessionEnding += new Microsoft.Win32.SessionEndingEventHandler(SystemEvents_SessionEnding);
}
private void SystemEvents_SessionEnding(object sender, Microsoft.Win32.SessionEndingEventArgs e)
{
       if (System.Windows.Forms.MessageBox.Show("SessionEnding\nDo you want to Exit?", "Confirm",
MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
       {
             // user clicked yes
             e.Cancel = false;
       }
       else
       {
             // user clicked no
             e.Cancel = true;
       }
 }

ก็ได้อา Goo ช่วยไว้ล่ะครับ
http://msdn.microsoft.com/en-us/library/microsoft.win32.systemevents.aspx
http://msdn.microsoft.com/en-us/library/microsoft.win32.systemevents.sessionending.aspx http://wpf.2000things.com/2010/08/28/47-detecting-when-the-windows-session-is-ending/

WPF : http://wpf.2000things.com http://msdn.microsoft.com/en-us/library/system.windows.application.sessionending.aspx

http://social.msdn.microsoft.com/Forums/eu/vsto/thread/4a547d93-851d-43dd-bb88-aa247e1bc95e

Internship day 6# at Thomson Reuters Thailand

      เช้าๆ วันจันทร์ นี้ไม่ได้กินข้าว แต่ได้ mocca ฟรี 1 แก้วจาก starbuck  วันนี้มาเข้างาน 8.50 มาถึง  ไม่มีใครใน office เบยยยยย วันนี้ได้รู้จักพี่ มข ชื่อพี่อัส รหัส 39 วิดวะไฟฟ้า ด้วยนั่งไกล้กันเป็นอาทิตย์เพิ่งได้คุยกัน ที่แท้ก็เด็ก มข ด้วยกัน 555

วันนี้ผมได้รับมอมหมายงานให้ อ่านหนังสือ c# จำนวน 4 บท แล้วให้ สรุปเนื้อหาที่ได้เป็นภาษาอังกฤษส่ง โดยประกอบด้วยเนื้อหาและตัวอย่างการใช้งาน   ทีนี้คิดว่า ไหนๆก็ได้เขียนแล้วเลยกะว่าจะฝึกวิธีเขียนให้ถูกหลักไวยากรณ์ไปเลย ก็เข้า google เซิิดหา basic writing  ที่จริงก็เคยเรียนมาแล้วแต่ก็ลืมไปแล้วเช่นกัน(1ปีที่แล้ว)  ลิ้งที่ search มาก็จะแปะไว้ด้านล่างพร้อมข้อความที่สรุปได้นะครับ http://www.slideshare.net/aragornyeh/basic-writing-in-english การเัขียน Basic writing ประกอบด้วย sentence, paragraph และ essay

งานที่ทำส่ง ทำแบบโง่ๆ นะครับ อย่าอ่านเลยเสียเวลา ไปอ่านของคนอื่นดีกว่า ฮ่าๆๆ

Chapter 2 : Variable and type in .NET Framework

  • Variable definition : except general variable definition  interest subject consist,

           Type inference is feature of the C# for variable define was created have type to match with itself value store.

                             Example: 


&nbsp;

var x =”OMG”;       // x data type is string

var v = 3.5                // y data type is double

 Variable Scope : scope is scope refers to the code block that starts with bracket and ends with closing bracket({ }). Consist variable scope class, variable scope in function, variable scope in block. How to selection level of scope should chosen to fit the work.

Example:


Class Test

{

      // class scope start

      Void function()

      {

             // function scope start

             If {  // block scope }

      }  // function scope end

} // class scope end

When scope end variable was declared will released memory to system.

Primitive data type :
Primitive Data Type:
All data type is object and important you should know about data type is data type which you declared, How much  minimum and maximum value possible.
Example:  range of type “int”  is -2147483648 to 2147483647

Variable definition in XAML :

The basic data types declared in XAML:
How to development on WPF application has separate between UI(XAML) and code(C#).
Example:


<Window x:Class=”MainWindow”

…

>

        <Window.Resources>

            <x:Array x:Key=”doubleArray” Type=”{x:Type sys:Double}”>

            <sys:Double>1</sys:Double>

            <sys:Double>2.5</sys:Double>

            </x:Array>

        </Window.Resources>

….

</Window>