IntelliTest结合NUnit3与Moq时,如何生成覆盖双分支的测试用例以实现全代码覆盖
I get it—your current setup is only hitting the if branch, and you're stuck wondering why IntelliTest isn't exploring the else path. Let's adjust your factory method and add a few key tweaks to make sure both branches get covered.
Step 1: Explicitly Feed All Enum Values to Pex
The issue with PexChoose.EnumValue here is that it might not be automatically detecting all members of your SystemConstants enum. Instead, use PexChoose.FromValues to explicitly list every possible enum value. This tells Pex exactly which options to explore, leaving no room for it to miss the ApplicationTypeDocument case.
Update your factory method like this:
using PexAPI; using Moq; [PexFactoryMethod(typeof(ExploreMockExample))] public static ExploreMockExample CreateMock() { var mockSystemBaseObject = new Mock<ISystemBaseObject>(); // Explicitly provide both enum values for Pex to test var selectedSystemType = PexChoose.FromValues( SystemConstants.SystemTypeDocument, SystemConstants.ApplicationTypeDocument ); mockSystemBaseObject.Setup(c => c.SystemType()).Returns(selectedSystemType); return new ExploreMockExample(mockSystemBaseObject.Object); }
Step 2: Mark Your Test Class with [PexClass]
Ensure the class containing your factory method is annotated with the [PexClass] attribute. This helps IntelliTest recognize the class as a valid source for factory methods and exploration guidance:
[PexClass] public class ExploreMockExampleTests { [PexFactoryMethod(typeof(ExploreMockExample))] public static ExploreMockExample CreateMock() { // ... modified factory code from Step 1 ... } // Optional but helpful: Add a parameterized test method to guide Pex [PexMethod] public int TestMethodToBeTested([PexAssumeUnderTest]ExploreMockExample instance) { return instance.MethodToBeTested(); } }
Step 3: Quick Check of IntelliTest Settings
Double-check your Visual Studio IntelliTest configuration to rule out any setup blocks:
- Confirm "Explore all paths" is enabled (this is the default, but it's worth verifying)
- Make sure there are no custom exclusion rules that might be blocking the
elsebranch from being explored
Why This Works
By using PexChoose.FromValues, you're removing ambiguity—you're directly telling Pex to test both enum values. This forces it to generate test cases for both the if (return 1) and else (return 2) paths, ensuring full code coverage for MethodToBeTested.
After making these changes, re-run IntelliTest on MethodToBeTested—you should now see two distinct test cases covering both branches.
内容的提问来源于stack exchange,提问作者Sachin Ambokar

