What PEX does is, it "scans" your program (the method you want to test) and comes with a set of test data for each and every path. Lets take an example.
[TestMethod] // mark this as a test case
[PexMethod] //PEX attribute
public void TestMethod1(int i, int y)
//The method you want to test
private int GetNumber(int i, int y)
int j = i / y;
if (j > 0)
The example is explantory (I have used MS Test), but with a few exceptions that the test case is now parameterized, to take in the parameters needed by the function that is being tested. And also you can see that a [PexMethod] attribute is added on top of the test case for PEX to recognize the test case.
You can see, that PEX created data for all possible paths of the function. Running PEX on your methods would also ensure that you delt with the most unexpected inputs as well, for an example an exception that might turn out for a value that the user passed into method that you never thought about in your test cases, making your program stable (in this example a DivideByZeroException, and if we had more paths our function could have taken, PEX would generate more test cases).
PEX work with .NET 2.0 and higher, there is also a VS 2008 add-in that you can use. Currently PEX is supports MS TEST, but they are planning to write extensions for other test tools as well.
A cool thing about PEX, is that it creates code for each and every test case it creates, so that also means that you can debug the generated test cases.