SlideShare a Scribd company logo
Testing C# and ASP.net using RubyMeerkatalyst@Ben_HallBen@BenHall.me.ukBlog.BenHall.me.uk
London based C# MVPWeb Developer @ 7digital.com Working on a number of Open Source ProjectsCo-Author of Testing ASP.net Web Applicationshttp://www.testingaspnet.com
How we can apply Ruby testing techniques to C#	- In mindset	- In practice 1|	Object Level testing2|	Systems testing
WHY?http://www.flickr.com/photos/atomicpuppy/2132073976/
VALUE
Realised Ruby doesn’t have as many problems as .net
Natural Language
Test Driven DevelopmentTDD
I love writing tests upfront
Not sure about implementationAccording to various TDD books \ blogs
Help with an initial design but what about long term?
“Unit”
Testing C# and ASP.net using Ruby
Behaviour Driven DevelopmentBDD
Shift focusFinal Intent
Code Coverage
Context \ Specification
RSpechttp://www.flickr.com/photos/dodgsun/467076780/
Testing C# and ASP.net using Ruby
Ruby (via IronRuby)p = ProductController.new(nil)C#public class ProductController : Controller{IStoreService _service;   public ProductController(IStoreService service)   {      _service = service;   }}Thanks to TekPub for Kona sample
Define the contextC#public ActionResult Index(int? id){ProductListViewModel model = null;   if (id.HasValue)      model = _service.GetHomeModel(id.Value);   else      return RedirectToAction("Index", "Home");      return View(model);}Ruby (via IronRuby)describe ProductController, “Product homepage requested" do  context "when Category ID is empty" do  endendThanks to TekPub for Kona sample
Create the context$: << ‘../../Kona/bin/’require ‘Kona.dll’Include Kona::Controllersdescribe ProductController, “Product homepage requested" do  context "when Category ID is empty" do  endendThanks to TekPub for Kona sample
Create the contextrequire '../spec_helper‘describe ProductController, “Product homepage requested" do  context "when Category ID is empty" do  endendThanks to TekPub for Kona sample
Create the contextrequire '../spec_helper‘describe ProductController, “Product homepage requested" do  context "when Category ID is empty" do     before(:each) do        controller = ProductController.new nilcategory_id = nil        @result = controller.Indexcategory_id     end  endendThanks to TekPub for Kona sample
Define the specrequire '../spec_helper‘describe ProductController, “Product homepage requested" do  context “with empty Category ID" do     before(:each) do ... End    it "should redirect to main landing page" do         @result.route_values[‘controller'].should == ‘Index’	  @result.route_values[‘home'].should == ‘Home’    endendThanks to TekPub for Kona sample
Stubbing via caricaturecontext “with validCategory ID" do   Before(:each)view_model = product_list('Test Category')       service = isolate Services::IStoreServiceservice.when_receiving(:get_home_model).with(valid_category_id).return(view_model)       controller = ProductController.new service       @result = controller.Indexvalid_category_id   end   it “returns a view model” do      @result.view_model.should_not == nil   end   it “should return name of selected category” do      @result.view_model.selected_category.name.should == 'Test Category‘   endendThanks to TekPub for Kona sample
Tests and Databasesdescribe Services::StoreService do  before(:all) dosession = NHibernate::create_sessionNHibernate::insert_category session    Services::StoreService.new session    @model = service.get_home_model 0  end  it "should return constructed object" do    @model.should_notbe_nil  end  it "should return all categories from database" do    @model.Categories.to_a.Count.should == 1  endendThanks to TekPub for Kona sample
http://www.flickr.com/photos/buro9/298994863/WHY RUBY?
[Subject(typeof(HomeController))]public class when_the_navigation_controller_is_asked_for_the_header :           specification_for_navigation_controller{        static ActionResult result;        Establish context = () => identity_tasks.Stub(i => i.IsSignedIn()).Return(true);        Because of = () => result = subject.Menu();        It should_ask_the_identity_tasks_if_the_user_is_signed_in = () => identity_tasks.AssertWasCalled(x => x.IsSignedIn());        It should_return_the_default_view = () => result.ShouldBeAView().And().ViewName.ShouldBeEmpty();        It should_not_use_a_master_page = () => result.ShouldBeAView().And().MasterName.ShouldBeEmpty();        It should_set_the_view_model_property_to_a_new_menu_view_model = () =>result.Model<MenuViewModel>().ShouldNotBeNull();        It should_set_the_properties_of_the_view_model_correctly = () => result.Model<MenuViewModel>().IsLoggedIn.ShouldBeTrue();    }
describe HomeController, “When the navigation controller is asked for the header” do   before(:all) do       @identity_tasks.Stub(i => i.IsSignedIn()).Return(true);       @result = subject.Menu();    end   it “should ask the identity tasks if the user is signed in” do       @identity_tasks.did_receive(:is_signed_in) .should be_successful   end   it “should return the default view” do     @result.shouldbe_view     @result.view_name.shouldbe_empty   end   it “should not use a master page” do     @result.shouldbe_view     @result.master_name.shouldbe_empty   end  it “should set the view model property to a new menu view model” do     @result.shouldbe_view    @result.model.should_notbe_nil  end  it “should set the properties of the view model correctly” do     @result.model.is_logged_in.shouldbe_true  endend
Consider your test suite containing > 500 testsEach test matters.But each problem hurts more
Share specsshare_examples_for "unauthorized user" do    it 'sets an-error message' do result.view_model.error_message.should == "Sorry, you need to login to access."    end    it 'redirects to the login page' do result.view_name.should   end end describe CheckoutController do it_should_behave_like “unauthorized user“describe AccountController doit_should_behave_like “unauthorized user“
Include  additional functionalityrequire ‘nhibernate_helpers’require ‘product_creation_extensions’require  ‘customer_creation_extensions’describe ProductController do
model.Categories.to_a.Count.should == 1model.Categories.should have(1)module Matchers    class CountCheck    def initialize(expected)      @expected = expected    end    def matches?(actual)actual.to_a.Count() == @expected    end  end  def have(expected)CountCheck.new(expected)  endendDuck Typing FTW!
Dynamically create specsdef find_products(category)Product.Find(:all, :conditions=> “category #{category}”)enddescribe ‘products should be able to be added to basket' do    before(:all) do     @basket = Basket.new  endfind_products(‘Boots’).each do |p|    it “can add #{p.product_name} to basket" do      @basket.add_item p.id      @basket.should contain(p)     end  endend
INTEGRATION TESTShttp://www.flickr.com/photos/gagilas/2659695352/
I’m against integration testsOr at least 90% of them
Multiple Collaborators
Unmanageable nightmare
12 hour execution time?
5174 passed, 491 failed, 94 skipped
“Tests aren’t failing because of defects”
‘Nearly’ end-to-endWhile knowing about everything in the middle...
Becomes a pain to refactor
FEAR
FEAR
UNIT testing frameworks
Bad organisation
Increased duplicationOverlapUnit TestsIntegration TestsUI \ System \ Acceptance TestsOverlap
STOPPED
Unit TestsAcceptance Tests
Outside-in Development
Cucumberhttp://www.flickr.com/photos/vizzzual-dot-com/2738586453/
Feature: Creating a schedule	In Order to book meetings	The manager	Needs to be able to view a teams calendarScenario: View calendar of another viewGiven “Bob” has a public calendarWhen the manager views “Bob”’s calendarThen an empty calendar should be shown
Given /^”([^\"]*)” has a public calendar$/ do |user|   pendingEndWhen /^ the manager views “([^\"]*)”’s calendar$/ do |user|   pendingEndThen /^ an empty calendar should be shown $/ do   pendingend
Thanks to TekPub for Kona sample
Thanks to TekPub for Kona sample
Feature: Display Products  In order to browse the catalog  The customer  Needs to see productsScenario: Single featured product on homepage    Given the featured product "Adventure Works 20x30 Binoculars"    When I visit the homepage    Then I should see "Adventure Works 20x30 Binoculars" listed under "Featured"
WebRathttp://www.flickr.com/photos/whatwhat/22624256/
visitclick_linkfill_inclick_buttoncheck and uncheckchooseselectattach_file
Given /^the featured product "([^\"]*)"$/ do |product_name|Product.createproduct_name, ‘featured’end
When /^I visit the homepage$/ do  visit url + '/'end
Then /^I should see "([^\"]*)" listed under "([^\"]*)"$/ do |product, area|  within div_id(area) do |products|products.should contain(product)  endEnddef div_id(area)  "#" + area.downcase.underscoreend
Dynamically replacedenv_selenium.rbdef url  "http://www.website.local"endWebrat.configure do |config|config.mode = :seleniumconfig.application_framework = :externalconfig.selenium_browser_key = get_browser_key  puts "Executing tests using the browser #{config.selenium_browser_key}"enddef get_browser_key()  command = "*firefox"  command = ENV['BROWSER'] if ENV['BROWSER']  return commandend
cucumber --profile selenium browser=*firefoxcucumber --profile selenium browser=*safaricucumber --profile selenium browser=*iexplorecucumber --profile selenium browser=*googlechrome
cucumber --profile webratHEADLESS BROWSINGBY REPLACING ENV.RB
Scenario Outline: Blowout Specials    Given <product> in "Blowout Specials"    When I visit the homepage    Then I should see <product> listed under "Blowout Specials"    Examples:      | product                                                         |      |  "Cascade Fur-lined Hiking Boots"           |      |  "Trailhead Locking Carabiner"                 |      |  "Climbing Rope with Single Caribiner"   |
Before doopen_connectionempty_databaseendat_exit doempty_databaseendMultiple Hooks
Multiple extension frameworksTest command line applicationsTest Silverlight\FlexTest WPF based desktop applicationsExecute in parallel across multiple machines
HUGE RE-USE == VALUE
http://www.flickr.com/photos/leon_homan/2856628778/
Focus on finding true valueLook at other communities for advice, support and inspiration
@Ben_HallBen@BenHall.me.ukBlog.BenHall.me.ukhttp://lolcatgenerator.com/lolcat/120/
Lonestar
using Cuke4Nuke.Framework;usingNUnit.Framework;usingWatiN.Core;namespaceGoogle.StepDefinitions{    publicclassSearchSteps    {        Browser _browser;         [Before]        publicvoidSetUp()        {            _browser = new WatiN.Core.IE();        }        [After]        publicvoidTearDown()        {            if (_browser != null)            {                _browser.Dispose();            }        }        [When(@"^(?:I'm on|I go to) the search page$")]        publicvoidGoToSearchPage()        {            _browser.GoTo("http://www.google.com/");        }        [When("^I search for \"(.*)\"$")]        publicvoidSearchFor(string query)        {            _browser.TextField(Find.ByName("q")).TypeText(query);            _browser.Button(Find.ByName("btnG")).Click();        }        [Then("^I should be on the search page$")]        publicvoidIsOnSearchPage()        {            Assert.That(_browser.Title == "Google");        }        [Then("^I should see \"(.*)\" in the results$")]        publicvoidResultsContain(stringexpectedResult)        {            Assert.That(_browser.ContainsText(expectedResult));        }    }}
Given /^(?:I'm on|I go to) the search page$/ do  visit 'http://www.google.com'end When /^I search for "([^\"]*)"$/ do|query|  fill_in 'q', :with => query  click_button 'Google Search'end Then /^I should be on the search page$/ do dom.search('title').should == "Google"end Then /^I should see \"(.*)\" in the results$/ do|text|  response.should contain(text)end
SoftwareRecommended:IronRubyRubyCucumberRspecWebRatmechanizeSelenium RCselenium-clientCaricatureactiverecord-sqlserver-adapterOptional:XSP \ MonoJetBrain’sRubyMineJRubyCapybaraCelerityActive record active-record-model-generatorFakerGuid
Useful Linkshttp://www.github.com/BenHallhttp://blog.benhall.me.ukhttp://stevehodgkiss.com/2009/11/14/using-activerecord-migrator-standalone-with-sqlite-and-sqlserver-on-windows.htmlhttp://www.testingaspnet.comhttp://http://msdn.microsoft.com/en-us/magazine/dd434651.aspxhttp://msdn.microsoft.com/en-us/magazine/dd453038.aspxhttp://www.cukes.info
SQL Server and Rubygem install activerecord-sqlserver-adapterDownload dbi-0.2.2.zip Extract dbd\ADO.rb to ruby\site_ruby\1.8\DBD\ADO.rb

More Related Content

What's hot (20)

PDF
Angularjs
Ynon Perek
 
PDF
Solid angular
Nir Kaufman
 
PPTX
Magento Indexes
Ivan Chepurnyi
 
PDF
Kiss PageObjects [01-2017]
Iakiv Kramarenko
 
PDF
RESTful services and OAUTH protocol in IoT
Yakov Fain
 
PPTX
Gae
guest0e51364
 
PDF
AngularJS best-practices
Henry Tao
 
PPTX
5 Reasons To Love CodeIgniter
nicdev
 
PDF
Intro to-rails-webperf
New Relic
 
PDF
Controller Testing: You're Doing It Wrong
johnnygroundwork
 
PDF
AtlasCamp 2015: Web technologies you should be using now
Atlassian
 
PDF
React Native Workshop - React Alicante
Ignacio Martín
 
PPTX
Angular JS - Introduction
Sagar Acharya
 
PPTX
I Love codeigniter, You?
إسماعيل عاشور
 
PPTX
Extend sdk
Harsha Nagaraj
 
PDF
Automation Abstractions: Page Objects and Beyond
TechWell
 
PDF
Introduction to Unit Tests and TDD
Betclic Everest Group Tech Team
 
PDF
Easy tests with Selenide and Easyb
Iakiv Kramarenko
 
PPTX
Understanding angular js
Aayush Shrestha
 
PPT
Ajax Applications with RichFaces and JSF 2
Max Katz
 
Angularjs
Ynon Perek
 
Solid angular
Nir Kaufman
 
Magento Indexes
Ivan Chepurnyi
 
Kiss PageObjects [01-2017]
Iakiv Kramarenko
 
RESTful services and OAUTH protocol in IoT
Yakov Fain
 
AngularJS best-practices
Henry Tao
 
5 Reasons To Love CodeIgniter
nicdev
 
Intro to-rails-webperf
New Relic
 
Controller Testing: You're Doing It Wrong
johnnygroundwork
 
AtlasCamp 2015: Web technologies you should be using now
Atlassian
 
React Native Workshop - React Alicante
Ignacio Martín
 
Angular JS - Introduction
Sagar Acharya
 
I Love codeigniter, You?
إسماعيل عاشور
 
Extend sdk
Harsha Nagaraj
 
Automation Abstractions: Page Objects and Beyond
TechWell
 
Introduction to Unit Tests and TDD
Betclic Everest Group Tech Team
 
Easy tests with Selenide and Easyb
Iakiv Kramarenko
 
Understanding angular js
Aayush Shrestha
 
Ajax Applications with RichFaces and JSF 2
Max Katz
 

Viewers also liked (12)

PDF
Unit 4 Project
lilmxdkid
 
PPTX
Tìm hiểu về website
Thông Quan Logistics
 
PDF
Sinh hoat CLB tin hoc Komaba lan 2 - Phat bieu cua Ngoc
Ngoc Dao
 
PDF
Asp net
quanvn
 
PDF
Bai giang-lap-trinh-web-bang-asp
Vu Nguyen Van
 
PPT
Asp
thinhtu
 
PPTX
Controls
teach4uin
 
PPT
Intro To Asp Net And Web Forms
SAMIR BHOGAYTA
 
PDF
Note d'intention
Virginie Colombel
 
PPTX
Introduction to ASP.NET
Peter Gfader
 
PPT
Cookies and sessions
Lena Petsenchuk
 
PPT
Developing an ASP.NET Web Application
Rishi Kothari
 
Unit 4 Project
lilmxdkid
 
Tìm hiểu về website
Thông Quan Logistics
 
Sinh hoat CLB tin hoc Komaba lan 2 - Phat bieu cua Ngoc
Ngoc Dao
 
Asp net
quanvn
 
Bai giang-lap-trinh-web-bang-asp
Vu Nguyen Van
 
Asp
thinhtu
 
Controls
teach4uin
 
Intro To Asp Net And Web Forms
SAMIR BHOGAYTA
 
Note d'intention
Virginie Colombel
 
Introduction to ASP.NET
Peter Gfader
 
Cookies and sessions
Lena Petsenchuk
 
Developing an ASP.NET Web Application
Rishi Kothari
 
Ad

Similar to Testing C# and ASP.net using Ruby (20)

PPTX
Testing ASP.net and C# using Ruby (NDC2010)
Ben Hall
 
PDF
Testing survival Guide
Thilo Utke
 
PDF
Do your test
Yura Tolstik
 
PPT
Ruby on Rails testing with Rspec
Bunlong Van
 
PPTX
Testing ASP.net Web Applications using Ruby
Ben Hall
 
PDF
Building Large Web Applications That Are Easy to Maintain
MarsBased
 
PDF
What NOT to test in your project
alexandre freire
 
PDF
Automated Testing with Ruby
Keith Pitty
 
PDF
When To Use Ruby On Rails
dosire
 
PDF
Best Practice in Development
mirrec
 
PPTX
x 13118706 Artur Janka Project Presentation
Artur Janka
 
PDF
War between Tools and Design 2016
Mark Windholtz
 
PDF
Testing for Agility: Bringing Testing into Everything
Camille Bell
 
PDF
Agile Web Development With Rails Third Edition Third Ruby Sam
xhessnanaj
 
PDF
Behavior Driven Development with Cucumber
Brandon Keepers
 
PPTX
Venturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
Jon Kruger
 
KEY
How To Test Everything
noelrap
 
PDF
2011-02-03 LA RubyConf Rails3 TDD Workshop
Wolfram Arnold
 
PPT
Ruby On Rails Introduction
Gustavo Andres Brey
 
PDF
Aki Salmi - Refactoring legacy code: a true story @ I T.A.K.E. Unconference 2...
Mozaic Works
 
Testing ASP.net and C# using Ruby (NDC2010)
Ben Hall
 
Testing survival Guide
Thilo Utke
 
Do your test
Yura Tolstik
 
Ruby on Rails testing with Rspec
Bunlong Van
 
Testing ASP.net Web Applications using Ruby
Ben Hall
 
Building Large Web Applications That Are Easy to Maintain
MarsBased
 
What NOT to test in your project
alexandre freire
 
Automated Testing with Ruby
Keith Pitty
 
When To Use Ruby On Rails
dosire
 
Best Practice in Development
mirrec
 
x 13118706 Artur Janka Project Presentation
Artur Janka
 
War between Tools and Design 2016
Mark Windholtz
 
Testing for Agility: Bringing Testing into Everything
Camille Bell
 
Agile Web Development With Rails Third Edition Third Ruby Sam
xhessnanaj
 
Behavior Driven Development with Cucumber
Brandon Keepers
 
Venturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
Jon Kruger
 
How To Test Everything
noelrap
 
2011-02-03 LA RubyConf Rails3 TDD Workshop
Wolfram Arnold
 
Ruby On Rails Introduction
Gustavo Andres Brey
 
Aki Salmi - Refactoring legacy code: a true story @ I T.A.K.E. Unconference 2...
Mozaic Works
 
Ad

More from Ben Hall (20)

PPTX
The Art Of Documentation - NDC Porto 2022
Ben Hall
 
PPTX
The Art Of Documentation for Open Source Projects
Ben Hall
 
PPTX
Three Years of Lessons Running Potentially Malicious Code Inside Containers
Ben Hall
 
PPTX
Containers without docker
Ben Hall
 
PPTX
Deploying windows containers with kubernetes
Ben Hall
 
PPTX
The Art of Documentation and Readme.md for Open Source Projects
Ben Hall
 
PPTX
How Secure Are Docker Containers?
Ben Hall
 
PPTX
The Challenges of Becoming Cloud Native
Ben Hall
 
PPTX
Scaling Docker Containers using Kubernetes and Azure Container Service
Ben Hall
 
PPTX
The art of documentation and readme.md
Ben Hall
 
PPTX
Experimenting and Learning Kubernetes and Tensorflow
Ben Hall
 
PPTX
Running .NET on Docker
Ben Hall
 
PPTX
Real World Lessons on the Pain Points of Node.JS Application
Ben Hall
 
PPTX
Tips on solving E_TOO_MANY_THINGS_TO_LEARN with Kubernetes
Ben Hall
 
PPTX
Deploying applications to Windows Server 2016 and Windows Containers
Ben Hall
 
PPTX
The How and Why of Windows containers
Ben Hall
 
PPTX
Lessons from running potentially malicious code inside containers
Ben Hall
 
PPTX
Deploying Windows Containers on Windows Server 2016
Ben Hall
 
PPTX
Learning Patterns for the Overworked Developer
Ben Hall
 
PPTX
Real World Lessons on the Pain Points of Node.js Applications
Ben Hall
 
The Art Of Documentation - NDC Porto 2022
Ben Hall
 
The Art Of Documentation for Open Source Projects
Ben Hall
 
Three Years of Lessons Running Potentially Malicious Code Inside Containers
Ben Hall
 
Containers without docker
Ben Hall
 
Deploying windows containers with kubernetes
Ben Hall
 
The Art of Documentation and Readme.md for Open Source Projects
Ben Hall
 
How Secure Are Docker Containers?
Ben Hall
 
The Challenges of Becoming Cloud Native
Ben Hall
 
Scaling Docker Containers using Kubernetes and Azure Container Service
Ben Hall
 
The art of documentation and readme.md
Ben Hall
 
Experimenting and Learning Kubernetes and Tensorflow
Ben Hall
 
Running .NET on Docker
Ben Hall
 
Real World Lessons on the Pain Points of Node.JS Application
Ben Hall
 
Tips on solving E_TOO_MANY_THINGS_TO_LEARN with Kubernetes
Ben Hall
 
Deploying applications to Windows Server 2016 and Windows Containers
Ben Hall
 
The How and Why of Windows containers
Ben Hall
 
Lessons from running potentially malicious code inside containers
Ben Hall
 
Deploying Windows Containers on Windows Server 2016
Ben Hall
 
Learning Patterns for the Overworked Developer
Ben Hall
 
Real World Lessons on the Pain Points of Node.js Applications
Ben Hall
 

Recently uploaded (20)

PDF
Biography of Daniel Podor.pdf
Daniel Podor
 
PDF
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PDF
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
PDF
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
PDF
POV_ Why Enterprises Need to Find Value in ZERO.pdf
darshakparmar
 
PDF
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PDF
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
PDF
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
PDF
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
PDF
What Makes Contify’s News API Stand Out: Key Features at a Glance
Contify
 
PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
PDF
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
Biography of Daniel Podor.pdf
Daniel Podor
 
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
POV_ Why Enterprises Need to Find Value in ZERO.pdf
darshakparmar
 
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
What Makes Contify’s News API Stand Out: Key Features at a Glance
Contify
 
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
Mastering Financial Management in Direct Selling
Epixel MLM Software
 

Testing C# and ASP.net using Ruby

Editor's Notes

  • #6: Cost of defects to 0Every test needs to justify itselfBut not just justify, add value both during the initial development and going forward. After working on a number of large scale .net based automation projects I started to question how much value I was adding to the project. This lead me to look at other communities as inspiration
  • #8: More abstracted away... As such nicer for testingMore fluid, more human readable.Perfect for tests. This is why I looked at how I can start using Ruby both in practice and mindset
  • #10: Cleaner, more focused designDefining how it’s meant to workProvide documentation for myself and team members over coming monthsyears of projectRefactoring
  • #12: Naming Implementation might go though multiple interactions until I reach my desired behaviour.
  • #13: Or at least, that’s what I would like..Net Problems- Unit doesn’t represent the concept of real world software - Legacy where nothing is a unit - Mentoring
  • #15: System brings together different parts to solve a particular problem
  • #16: Behaviour can be isolated units like TDDBut also accept that it might involve a number of other classes Defining the behaviour of our system, means we aren’t too focused on
  • #17: Feature Coverage
  • #18: Often forgot in the .Net world...Started to come more maintain stream thanks to Aaron Jenson and Scott BellwareBounded contexts
  • #30: http://whocanhelpme.codeplex.com/Good example of how to use Mspec with MVC. Sadly, I think Rspec has a nicer syntax.Naming + tests are very good.
  • #64: get_div_id == “Design UI for Testability”
  • #66: get_div_id == “Design UI for Testability”
  • #67: get_div_id == “Design UI for Testability”
  • #68: get_div_id == “Design UI for Testability”
  • #69: get_div_id == “Design UI for Testability”