SlideShare a Scribd company logo
JavaScript Unit Testing 
Adoption in the Enterprise 
jon.gregory@microlise.com - @JonGregory77
Introduction 
• Jon Gregory Technical Architect at Microlise, 
have been working with .Net since 2.0 
• Microlise supply vehicle tracking, telematics 
and proof of delivery solutions. 
• Our approach to adopting JS Unit Testing
Drivers 
• Two Large Web Forms / MVC Hybrid Applications 
• Organically grown JavaScript 
• Unstructured large JavaScript files 
• Increasing use of front end logic 
• UX team using bootstrap based UI framework
State of JavaScript
State of JavaScript 
• In-line JavaScript 
• Difficult to read unstructured files 
• Multiple JQuery versions 
• JQuery selectors binding to the view 
• Ball of wool design pattern!
Unit Testing
Unit Testing 
• Invested heavily in C# Unit Testing 
• Benefits in good design & confidence in code 
• We wanted the same for JavaScript!
Challenges 
• Perception it wouldn't add value 
• Wasn't clear what could be tested 
• We hadn't looked at what was possible 
• Visual Studio didn't provide the tools
Friction Free 
C# => JS
Real World
Evaluation
Evaluation 
• Many tools available 
• Community recommended top three 
• QUnit, Jasmine and Mocha 
• QUnit and Mocha need a mocking framework
Test Runner 
• Needed to be able to run the tests! 
• ReSharper plugin available for Mocha but 
requires NodeJS 
• Chutzpah easier and free Visual Studio plugin 
• Chose to look at running in Node as a Phase 2
Approach 
• File structure convention 
• Mocha Controller added to MVC Applications 
• Static HTML 
• Training and sample applications 
• Visual Studio / Resharper Templates
File Structure - MVC 
/Tests 
--/app 
----/ControllerName 
------/ViewName 
--------TestFileOne.Tests.js
File Structure - Logic 
/Scripts 
--/app 
----/Maths 
------Calculator.js 
/Tests 
--/app 
----/Maths 
------Calculator.Test.js
Code Demo
Success
Future
Future 
● Looking at ways of adding into out continuous 
integration & inspection process 
●Work to improve JavaScript coding techniques 
and writing structured JavaScript 
●NCrunch Style continuous runner. 
● Continuing to promote and train to increase 
uptake
Useful Links 
● https://www.syncfusion.com/resources/techpor 
tal/ebooks/javascript 
● http://www.sonarqube.org/ 
● PluralSight – Testing ClientSide JavaScript 
● Gil Fink – MSDN – Jasmine Talks
Questions ?
Ad

Recommended

Dot Net Notts Js Unit Testing at Microlise
Dot Net Notts Js Unit Testing at Microlise
Jonathan Gregory
 
What's new in Visual Studio 2013 & TFS 2013
What's new in Visual Studio 2013 & TFS 2013
Danijel Malik
 
ASP.NET 5 Overview - Post Build 2015
ASP.NET 5 Overview - Post Build 2015
Shahed Chowdhuri
 
Introducing Visual Studio Online
Introducing Visual Studio Online
Ed Blankenship
 
Developer@sky
Developer@sky
Claudia Danciu
 
Lap Around Visual Studio 2010 Ultimate And TFS 2010
Lap Around Visual Studio 2010 Ultimate And TFS 2010
Ed Blankenship
 
Jasmine - A BDD test framework for JavaScript
Jasmine - A BDD test framework for JavaScript
Sumanth krishna
 
Automation test framework with cucumber – BDD
Automation test framework with cucumber – BDD
123abcda
 
Gatling & LoadUI - Open Source Tools For Preformance Testing
Gatling & LoadUI - Open Source Tools For Preformance Testing
Raman Kansal
 
Intro to Service Worker API and its use cases
Intro to Service Worker API and its use cases
satejsahu
 
MPS, MVC Framework
MPS, MVC Framework
DinuSrs
 
Chennai Drupal Meet
Chennai Drupal Meet
sivaji2009
 
Automated Testing With Jasmine, PhantomJS and Jenkins
Automated Testing With Jasmine, PhantomJS and Jenkins
Work at Play
 
ASP .NET MVC Introduction & Guidelines
ASP .NET MVC Introduction & Guidelines
Dev Raj Gautam
 
Automated testing for real
Automated testing for real
Markko Paas
 
Mozilla Web QA: Who, What, Why, How
Mozilla Web QA: Who, What, Why, How
Stephen Donner
 
Jenkins and visual regression – Exove
Jenkins and visual regression – Exove
Exove
 
Test Automation Framework using Cucumber BDD Overview - part 2
Test Automation Framework using Cucumber BDD Overview - part 2
Mindfire Solutions
 
Groovy & Grails - From Scratch to Production
Groovy & Grails - From Scratch to Production
Tal Maayani
 
Jump into React-Native (Class 1)
Jump into React-Native (Class 1)
Waqqas Jabbar
 
Introduction to Grails
Introduction to Grails
Hiten Pratap Singh
 
Better java with design
Better java with design
Narayann Swaami
 
DevOps Toolchain v1.0
DevOps Toolchain v1.0
Giragadurai Vallirajan
 
The state of testing @ Microsoft
The state of testing @ Microsoft
Robert MacLean
 
Cucumber ppt
Cucumber ppt
Qwinix Technologies
 
Asp.net Overview and Controllers
Asp.net Overview and Controllers
Mustafa Saeed
 
Continuous Integration: Improving Quality in Moodle
Continuous Integration: Improving Quality in Moodle
Dan Poltawski
 
Adobe resume
Adobe resume
mk chow
 
Psych 555 week 2 dq 1
Psych 555 week 2 dq 1
meltconcalo1975
 
Onalytica-Social-Media-Marketing-Top-100-Influencers-and-Brands
Onalytica-Social-Media-Marketing-Top-100-Influencers-and-Brands
Robert Alexander
 

More Related Content

What's hot (20)

Gatling & LoadUI - Open Source Tools For Preformance Testing
Gatling & LoadUI - Open Source Tools For Preformance Testing
Raman Kansal
 
Intro to Service Worker API and its use cases
Intro to Service Worker API and its use cases
satejsahu
 
MPS, MVC Framework
MPS, MVC Framework
DinuSrs
 
Chennai Drupal Meet
Chennai Drupal Meet
sivaji2009
 
Automated Testing With Jasmine, PhantomJS and Jenkins
Automated Testing With Jasmine, PhantomJS and Jenkins
Work at Play
 
ASP .NET MVC Introduction & Guidelines
ASP .NET MVC Introduction & Guidelines
Dev Raj Gautam
 
Automated testing for real
Automated testing for real
Markko Paas
 
Mozilla Web QA: Who, What, Why, How
Mozilla Web QA: Who, What, Why, How
Stephen Donner
 
Jenkins and visual regression – Exove
Jenkins and visual regression – Exove
Exove
 
Test Automation Framework using Cucumber BDD Overview - part 2
Test Automation Framework using Cucumber BDD Overview - part 2
Mindfire Solutions
 
Groovy & Grails - From Scratch to Production
Groovy & Grails - From Scratch to Production
Tal Maayani
 
Jump into React-Native (Class 1)
Jump into React-Native (Class 1)
Waqqas Jabbar
 
Introduction to Grails
Introduction to Grails
Hiten Pratap Singh
 
Better java with design
Better java with design
Narayann Swaami
 
DevOps Toolchain v1.0
DevOps Toolchain v1.0
Giragadurai Vallirajan
 
The state of testing @ Microsoft
The state of testing @ Microsoft
Robert MacLean
 
Cucumber ppt
Cucumber ppt
Qwinix Technologies
 
Asp.net Overview and Controllers
Asp.net Overview and Controllers
Mustafa Saeed
 
Continuous Integration: Improving Quality in Moodle
Continuous Integration: Improving Quality in Moodle
Dan Poltawski
 
Adobe resume
Adobe resume
mk chow
 
Gatling & LoadUI - Open Source Tools For Preformance Testing
Gatling & LoadUI - Open Source Tools For Preformance Testing
Raman Kansal
 
Intro to Service Worker API and its use cases
Intro to Service Worker API and its use cases
satejsahu
 
MPS, MVC Framework
MPS, MVC Framework
DinuSrs
 
Chennai Drupal Meet
Chennai Drupal Meet
sivaji2009
 
Automated Testing With Jasmine, PhantomJS and Jenkins
Automated Testing With Jasmine, PhantomJS and Jenkins
Work at Play
 
ASP .NET MVC Introduction & Guidelines
ASP .NET MVC Introduction & Guidelines
Dev Raj Gautam
 
Automated testing for real
Automated testing for real
Markko Paas
 
Mozilla Web QA: Who, What, Why, How
Mozilla Web QA: Who, What, Why, How
Stephen Donner
 
Jenkins and visual regression – Exove
Jenkins and visual regression – Exove
Exove
 
Test Automation Framework using Cucumber BDD Overview - part 2
Test Automation Framework using Cucumber BDD Overview - part 2
Mindfire Solutions
 
Groovy & Grails - From Scratch to Production
Groovy & Grails - From Scratch to Production
Tal Maayani
 
Jump into React-Native (Class 1)
Jump into React-Native (Class 1)
Waqqas Jabbar
 
The state of testing @ Microsoft
The state of testing @ Microsoft
Robert MacLean
 
Asp.net Overview and Controllers
Asp.net Overview and Controllers
Mustafa Saeed
 
Continuous Integration: Improving Quality in Moodle
Continuous Integration: Improving Quality in Moodle
Dan Poltawski
 
Adobe resume
Adobe resume
mk chow
 

Viewers also liked (15)

Psych 555 week 2 dq 1
Psych 555 week 2 dq 1
meltconcalo1975
 
Onalytica-Social-Media-Marketing-Top-100-Influencers-and-Brands
Onalytica-Social-Media-Marketing-Top-100-Influencers-and-Brands
Robert Alexander
 
Как известно собеседование подходит к концу, когда интервьюер Вас спрашивает
Как известно собеседование подходит к концу, когда интервьюер Вас спрашивает
BOSSHUNT
 
look event
look event
saraswatipuja17
 
Anita Hesen | Freelance vormgever | DTP-er
Anita Hesen | Freelance vormgever | DTP-er
Anita Hesen
 
Deklarasiku
Deklarasiku
theresiaputri04
 
Fall CUE 15 Transformative Leadership Preso
Fall CUE 15 Transformative Leadership Preso
Michael Niehoff
 
2015 Inspire Tour: Better Data
2015 Inspire Tour: Better Data
Jeremy Ploessel
 
Zoo Karolina
Zoo Karolina
klasa6
 
Objetivos2
Objetivos2
compatiendoexperiencias
 
StalPartner Tanks for oil and gas
StalPartner Tanks for oil and gas
Stal Partner
 
Intelligence Bureau Notification 2014 - ExamPundit
Intelligence Bureau Notification 2014 - ExamPundit
TeamExamPundit
 
A song of ice and fire
A song of ice and fire
mariakarmen
 
Notulen dpm
Notulen dpm
Imelda Wijaya
 
Presentación prevención alérgenos
Presentación prevención alérgenos
compatiendoexperiencias
 
Onalytica-Social-Media-Marketing-Top-100-Influencers-and-Brands
Onalytica-Social-Media-Marketing-Top-100-Influencers-and-Brands
Robert Alexander
 
Как известно собеседование подходит к концу, когда интервьюер Вас спрашивает
Как известно собеседование подходит к концу, когда интервьюер Вас спрашивает
BOSSHUNT
 
Anita Hesen | Freelance vormgever | DTP-er
Anita Hesen | Freelance vormgever | DTP-er
Anita Hesen
 
Fall CUE 15 Transformative Leadership Preso
Fall CUE 15 Transformative Leadership Preso
Michael Niehoff
 
2015 Inspire Tour: Better Data
2015 Inspire Tour: Better Data
Jeremy Ploessel
 
Zoo Karolina
Zoo Karolina
klasa6
 
StalPartner Tanks for oil and gas
StalPartner Tanks for oil and gas
Stal Partner
 
Intelligence Bureau Notification 2014 - ExamPundit
Intelligence Bureau Notification 2014 - ExamPundit
TeamExamPundit
 
A song of ice and fire
A song of ice and fire
mariakarmen
 
Ad

Similar to Js unit testingpresentation (20)

Test Automation Framework Designs
Test Automation Framework Designs
Test Automaton
 
Java script unit testing
Java script unit testing
Mats Bryntse
 
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
Ortus Solutions, Corp
 
3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION API
Gavin Pickin
 
3 WAYS TO TEST YOUR COLDFUSION API -
3 WAYS TO TEST YOUR COLDFUSION API -
Ortus Solutions, Corp
 
JAVASCRIPT Test Driven Development & Jasmine
JAVASCRIPT Test Driven Development & Jasmine
Anup Singh
 
Test Automation Framework Designs
Test Automation Framework Designs
Sauce Labs
 
Unit testing, UI testing and Test Driven Development in Visual Studio 2012
Unit testing, UI testing and Test Driven Development in Visual Studio 2012
Jacinto Limjap
 
JAVASCRIPT TDD(Test driven Development) & Qunit Tutorial
JAVASCRIPT TDD(Test driven Development) & Qunit Tutorial
Anup Singh
 
How to write Testable Javascript
How to write Testable Javascript
ColdFusionConference
 
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
Gavin Pickin
 
Implementing TDD in for .net Core applications
Implementing TDD in for .net Core applications
Ahmad Kazemi
 
Testing Ext JS and Sencha Touch
Testing Ext JS and Sencha Touch
Mats Bryntse
 
How do I write Testable Javascript so I can Test my CF API on Server and Client
How do I write Testable Javascript so I can Test my CF API on Server and Client
Gavin Pickin
 
How do I Write Testable Javascript so I can Test my CF API on Server and Client
How do I Write Testable Javascript so I can Test my CF API on Server and Client
ColdFusionConference
 
Writing and Testing JavaScript-heavy Web 2.0 apps with JSUnit
Writing and Testing JavaScript-heavy Web 2.0 apps with JSUnit
Alex Chaffee
 
JavaScript TDD with Jasmine and Karma
JavaScript TDD with Jasmine and Karma
Christopher Bartling
 
Test automation proposal
Test automation proposal
Mihai-Cristian Fratila
 
Coding Naked
Coding Naked
Caleb Jenkins
 
Quick tour to front end unit testing using jasmine
Quick tour to front end unit testing using jasmine
Gil Fink
 
Test Automation Framework Designs
Test Automation Framework Designs
Test Automaton
 
Java script unit testing
Java script unit testing
Mats Bryntse
 
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
Ortus Solutions, Corp
 
3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION API
Gavin Pickin
 
3 WAYS TO TEST YOUR COLDFUSION API -
3 WAYS TO TEST YOUR COLDFUSION API -
Ortus Solutions, Corp
 
JAVASCRIPT Test Driven Development & Jasmine
JAVASCRIPT Test Driven Development & Jasmine
Anup Singh
 
Test Automation Framework Designs
Test Automation Framework Designs
Sauce Labs
 
Unit testing, UI testing and Test Driven Development in Visual Studio 2012
Unit testing, UI testing and Test Driven Development in Visual Studio 2012
Jacinto Limjap
 
JAVASCRIPT TDD(Test driven Development) & Qunit Tutorial
JAVASCRIPT TDD(Test driven Development) & Qunit Tutorial
Anup Singh
 
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
Gavin Pickin
 
Implementing TDD in for .net Core applications
Implementing TDD in for .net Core applications
Ahmad Kazemi
 
Testing Ext JS and Sencha Touch
Testing Ext JS and Sencha Touch
Mats Bryntse
 
How do I write Testable Javascript so I can Test my CF API on Server and Client
How do I write Testable Javascript so I can Test my CF API on Server and Client
Gavin Pickin
 
How do I Write Testable Javascript so I can Test my CF API on Server and Client
How do I Write Testable Javascript so I can Test my CF API on Server and Client
ColdFusionConference
 
Writing and Testing JavaScript-heavy Web 2.0 apps with JSUnit
Writing and Testing JavaScript-heavy Web 2.0 apps with JSUnit
Alex Chaffee
 
JavaScript TDD with Jasmine and Karma
JavaScript TDD with Jasmine and Karma
Christopher Bartling
 
Quick tour to front end unit testing using jasmine
Quick tour to front end unit testing using jasmine
Gil Fink
 
Ad

Js unit testingpresentation

  • 1. JavaScript Unit Testing Adoption in the Enterprise [email protected] - @JonGregory77
  • 2. Introduction • Jon Gregory Technical Architect at Microlise, have been working with .Net since 2.0 • Microlise supply vehicle tracking, telematics and proof of delivery solutions. • Our approach to adopting JS Unit Testing
  • 3. Drivers • Two Large Web Forms / MVC Hybrid Applications • Organically grown JavaScript • Unstructured large JavaScript files • Increasing use of front end logic • UX team using bootstrap based UI framework
  • 5. State of JavaScript • In-line JavaScript • Difficult to read unstructured files • Multiple JQuery versions • JQuery selectors binding to the view • Ball of wool design pattern!
  • 7. Unit Testing • Invested heavily in C# Unit Testing • Benefits in good design & confidence in code • We wanted the same for JavaScript!
  • 8. Challenges • Perception it wouldn't add value • Wasn't clear what could be tested • We hadn't looked at what was possible • Visual Studio didn't provide the tools
  • 12. Evaluation • Many tools available • Community recommended top three • QUnit, Jasmine and Mocha • QUnit and Mocha need a mocking framework
  • 13. Test Runner • Needed to be able to run the tests! • ReSharper plugin available for Mocha but requires NodeJS • Chutzpah easier and free Visual Studio plugin • Chose to look at running in Node as a Phase 2
  • 14. Approach • File structure convention • Mocha Controller added to MVC Applications • Static HTML • Training and sample applications • Visual Studio / Resharper Templates
  • 15. File Structure - MVC /Tests --/app ----/ControllerName ------/ViewName --------TestFileOne.Tests.js
  • 16. File Structure - Logic /Scripts --/app ----/Maths ------Calculator.js /Tests --/app ----/Maths ------Calculator.Test.js
  • 20. Future ● Looking at ways of adding into out continuous integration & inspection process ●Work to improve JavaScript coding techniques and writing structured JavaScript ●NCrunch Style continuous runner. ● Continuing to promote and train to increase uptake
  • 21. Useful Links ● https://www.syncfusion.com/resources/techpor tal/ebooks/javascript ● http://www.sonarqube.org/ ● PluralSight – Testing ClientSide JavaScript ● Gil Fink – MSDN – Jasmine Talks

Editor's Notes

  • #2: A few quick questions Whos using Javascript? Whos writing Tests for JavaScript? Who enjoys working with JavaScript? I enjoy working with JavaScript!
  • #3: Thank you for coming Technical Architect at Microlise, What does a Technical Architect do at Microlise? Well most of it is sounding confident and blagging but sometimes I get to look at tools and techniques. As you heard Microlise is telematics company and primarily a Microsoft .Net Software house. This talk is about how we approached adopting JavaScript Unit Testing. We had no background in this and this talk is aimed at showing how we got started, where we are now and what we are going to do next. If you have any feedback or are doing something different with JS Unit Testing would be great to hear about it
  • #4: We have two large web application which started life as years ago using Web Forms and now have MVC added in. We are migrating to MVC and not got much left to do Majority developers C# is first language and JavaScript is a means to an end for the client work. Working in a SCRUM style tend to get small task which have been adding into the JavaScript files a little at a time. Without controls this has led to large unstructured JavaScript files. Over the last few years we have adopted Knockout and Twitter Bootstrap derived UI framework and SignalR, which has led to increase use of JavaScript.
  • #5: Ball of Wool Design Pattern! Found it is very easy to quickly get in a bit of state with JavaScript. Because it is not the primary language used and doesn't have the same tool set support in VS Found it has not always had the same level of attention as with the C#.
  • #6: Some of the naughty things that have happened Small pieces of js added into views – then added to and added to over time so we end up with inline javascript C# Web forms developers – not experienced being closer to HTML and JavaScript JQuery selectors binding javascript to views Multiple versions of JQuery – reluctant to upgrade for risk of breaking. It Has Become costly and Time Consuming to support
  • #7: So we thought would Unit Testing JavaScript Help?
  • #8: We have been using Unit Testing for a number of years on the C# side and the concepts were well understood. We knew the benefits were Improved Design Live Documentation Confidence in Code Early Detection of Bugs Improved Quality of life :)
  • #9: Wasn't all plain sailing Some people were all for it, others were less keen Some of the initial feedback was Difficult to do Poor tooling available Lot of Effort for little reward There wasn't enough logic in JS to test So we had some work to do to meet these challenges and convince people it was worth doing.
  • #10: We needed a solution that would be friction free and easy for everyone to adopt. We wanted to transition Unit Testing and mocking skills gained in C# to JS Looking for something that was as close as possible to NUnit and MOQ as practically possible. Aimed to provide a framework and resources so developers could start quickly and just concentrate on writing tests. If its not easy and fun to write tests then we wouldn't get quality tests produced
  • #11: We had big constraint in some customers use IE8 , we supply to the transport and public sectors and they are slow to upgrade. Anything we chose had to work well with IE8 We had to be able to mock JQuery selectors to be able to support legacy JavaScript SinonJS allowed us to do this.
  • #12: There are many many tools available now, too many to be able to practically evaluate. We looked at the three most mentioned in the community. QUnit - TDD Jasmine - BDD Mocha – All the above!
  • #13: Jasmine provides its own mocking framework but Mocha and QUnit don't so also looked at SinonJS Chose mocha because most flexible and can run in node for command line work Can use BDD and TDD style for test and QUnit Tests. TDD closer to the way we are currently working Mocha ships with Chai.js as the expectation framework. This is the provider that does the assertion at the end of the test, chai.js does not support IE8 Fortunately Mocha allows you to substitute this an we can use Expect.js which supports IE8. Can swap for each test suite so not restricting ourselves.
  • #14: Plugin available to run Mocha tests in Resharper But there is a great visual studio plugin called Chutzpah which is free Will show Chutzpah later in code demo Chose to use Mocha MVC Controller so can be able to run from a web page This is hidden behind a permission attribute - retain the option to run on customer site for investigation Can also run from Static HTML for non MVC application We new the tests could be run from the command line using node and then integrate into build process, we chose to leave this to a phase 2 once the processes had been adopted and we had a suite of tests. This was just down to time constraints
  • #15: So we had chosen; Mocha as the test framework SinonJS for the Mocking / Test Double Framework And Expect.js as our IE8 friendly expectation framework How were we going to approach the implementation and rollout. Visual Studio Templates for test files and projects with all the infrastructure required. Created a Sample Application with basic tests in for each technique Mocking, Stubs etc etc Help Hands on Training Session with simple exercises so everyone could have a go.
  • #16: ASP.Net nased on convention over configuration We wanted a convention so we didn't end up with tests smeared through the application. If everything is under a folder called test we can pick this up with a test runner as part of the build process – mocha defaults to looking for a Test folder (mention typo) Our MVC content files follow an internal convention which allows the javascript file and the MVC view to be related by name. The tests follow the same convention allowing the file under test and the test to be related.
  • #17: This second convention is for JavaScript files not related to MVC views Again allows the file under test and the test file to be related. No easy peasy resharper navigation available in javascript!
  • #19: This is my son Oliver being a proud dad wanted to find a way of getting him into the presentation Can we measure success? Well what did we want to achieve – easy uptake for C# developers and be able to test green and brown field JS. Adoption is increasing every sprint Several Developers have just picked it up and run with it without training JavaScript work is irregular so regularly promoting Halfway through the process!
  • #20: The mother in law gets upset when I use her picture in presentations
  • #21: We are looking at ways of adding into out continuous integration and Continuous Inspections to monitor quality and coverage We use NCrunch for C# want to create a continuous runner for JavaScript which is possible. Looking at Karma, Testacular, PhantomJS Still some adoption challenges to get over, large part of this work has been coaching and promoting Work to improve JavaScript coding techniques and writing better structured JavaScript, using Immediately Invoked Functions as seen in the code demo Separate out selectors to prevent having to mock
  • #22: I will tweet out bitly these links out tomorrow
  • #23: Any Easy Questions?