


First of all, according to my own understanding, what is the difference between TDD and BDD?
The first is the difference in thinking. Traditional TDD focuses on whether the interface is correctly implemented, so each interface usually has a corresponding unit test class. BDD uses story templates and scenarios to describe the specific functional performance of the product when users operate it, which is somewhat similar to the traditional Use Case. Writing BDD tests is more like test cases that testers usually write. Since BDD is generally expressed in natural language, even non-developers can understand it. The following is an example of BDD:
Behat is a BDD framework under PHP and can be used with PHPUnit.
For a more detailed introduction, you can check out behat’s official website, http://behat.org/
When doing automated testing of web applications, you will encounter some troubles when encountering interface testing, whether using TDD or BDD.
There are usually two solutions:
1. Bypass GUI testing. Since most web development uses the MVC framework, according to the principles of MVC, the Controller only needs to pass the correct data to the View to complete the task. Therefore, when doing testing, we only need to verify whether the Controller passes the correct data to the specified View. As for whether the View can display the data correctly, it depends on the integration test to verify.
2. Use some GUI testing framework or browser emulator. Today I’m going to talk about using a browser emulator.
Browser simulators can be roughly divided into two types:
• Headless browser emulators - browser emulators, that can be executed fully without GUI through console. Such emulators can do HTTP request and emulate browser applications on high level (HTTP stack), but on lower level (JS, CSS) they are totally limited. But they are much faster than real browsers, cuz you don't need to parse CSS or execute JS in order to open pages or click links with them.
• Simply put, this emulator is faster than a real browser, but it cannot handle CSS or JS.
• In-browser emulators - this emulators works with real browsers, taking full control of them and using them as zombies for their testing needs. This way, you'll have standart fully-configured real browser, which you will be able to control. CSS styling, JS and AJAX execution - all supported out of the box.
• This simulator is closer to a real browser and can handle CSS and JS, but the speed will be relatively slower than the first one.
But in fact, when actually doing testing, both simulators are generally needed. Because you can't use the in-browser simulator for all tests, because when there are many tests, the speed will be unbearable. But when you need to test similar Ajax requests, you cannot use the Headless simulator and must use the In-browser simulator.
Since the two simulators are very different and each has a different API, it is very troublesome to use two sets of APIs for testing at the same time.
At this time, the advantages of MINK come out. MINK is a browser simulator abstraction layer that supports both in-browser and headless simulators with the same set of APIs.
The following will introduce how to use Behat and MINK to do BDD for WEB applications.
1. Install Behat
$ pear channel-discover pear.symfony.com
$ pear channel-discover pear.behat.org
$ pear install behat/behat
2. Install MINK
$ pear channel-discover pear.behat.org
$ pear install behat/mink-beta
3. Create a new sosobaike directory, enter the sosozhidao directory, and execute the behat --init command
$ mkdir sosobaike
$ cd sosobaike
$ behat --init
At this time behat will help you create a features directory and features/bootstrap/FeatureContext.php file
FeatureContext.php is where the actual methods for unit testing are stored
4. Create features/search.feature file
But if we do not use MINK and run the behat command directly, behat will recommend that you add some test methods to features/boostrap/FeatureContext.php. You need to use scripts like Selenium to perform these test methods yourself. assertion.
5. But if you use MINK, things are much simpler, just modify the features/bootstrap/FeatureContext.php file,
Add two lines of code.
a) require_once 'mink/autoload.php';
b) Change the parent class of FeatureContext from BehatContext to BehatMinkBehatContextMinkContext
6. Execute the behat -dl command. If everything is normal, you will see results similar to the following
The above are actually some APIs supported by MINK.
7. Execute the command behat features/search.feature, you will see the following results
At this point, even if a BDD test is completed, the whole process is very simple and does not take longer than writing a test case. It also has a function that the test case does not have - it can automatically execute the verification function.
Therefore, I personally think that students doing testing can try to use this method instead of test cases, which can save a lot of time.
For development students, I personally think that when doing BDD or TDD for web applications, you should use a solution that bypasses GUI testing, that is, a solution that only tests the Controller.
The reasons are as follows:
1. Developers and testers have different requirements for test running speed. Testers do not have high requirements for test running speed. They can start the test, then do other things, and come back later. Just look at the results. But developers are different. Every time they modify a code, they need to run a complete test to ensure that their modifications do not destroy other functions. If running a complete test takes time, then some developers will want to do unit testing. Although using MINK is faster than accessing it in a real browser, since you are always accessing the real product code, many tests will access the database. Once there are many tests, it will be very time-consuming to run all the tests.
2. Since using MINK will access the real product code, it means that you need to configure related environments (dependent libraries, databases, etc.), and even need to restore the database to its initial state. As long as there is an error in any configuration link, it may cause the unit test that originally passed to fail. This fails to meet the standards of a good unit test. Good unit tests must ensure consistent results whenever they are run. To achieve this effect, you cannot rely on external conditions (for example: database, network). These external conditions should be simulated as much as possible using code.
Excerpted from NEE's Blog

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),
