Refactored ensure() and ensureNot(); added throwProvidedException()